2017-08-17 4 views
1

私はサーバー側でセッションIDを暗号化しましたが、クライアント側でセッションIDを復号化しようとしているときにエラーが発生しています。誰でもエラーを解決するのを手伝ってください。Javaを使用してクライアント側で復号化

public static String decrypt(String sessionId) 
{ 
    try 
    { 
     Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); 
     final SecretKeySpec secretKey = new SecretKeySpec(key, "AES"); 
     cipher.init(Cipher.DECRYPT_MODE, secretKey); 
     final String decryptedSessionId = new String(cipher.doFinal(Base64.decodeBase64(sessionId))); 
     return decryptedSessionId; 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 

    } 
    return null; 
} 

来ているエラーは、次のとおりです。それは、「いくつかの」GWTモジュールのクライアントコードで使用することはできませんので クラスのjavax.crypto.Cipherは「JREエミュレーションライブラリに存在しません。

この検査では、JREエミュレーションライブラリには存在しないJDKクラスのクライアントコードでの使用状況が報告されます。

私が使用する暗号化のための方法は次のとおりです。

public static String encrypt(String sessionId) 
{ 
    try 
    { 
     Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); 
     final SecretKeySpec secretKey = new SecretKeySpec(key, "AES"); 
     cipher.init(Cipher.ENCRYPT_MODE, secretKey); 
     final String encryptedSessionId = Base64.encodeBase64String(cipher.doFinal(sessionId.getBytes())); 
     return encryptedSessionId; 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
    return null; 

} 

私はこのようなものに新しいですが、あなたはGWTがクライアント上でのコーディングのJava標準の暗号化ライブラリを使用することはできませんエラー

+0

提案(回答ではありません)です。 GWTを使用している場合、コードをサーバー側(RPC)に移動します。そうすればエミュレーションの必要はありません。おそらく、あなたはクライアント側でJDKを使うことができます。 –

+0

** [ECBモード](https://crypto.stackexchange.com/q/14487/13022)**は絶対に使用しないでください。それは決定論的であり、したがって意味的に安全ではありません。最低でも[CBC](https://crypto.stackexchange.com/q/22260/13022)や[CTR](https://crypto.stackexchange.com/a/2378/)のようなランダム化モードを使用する必要があります13022)。 [パディング・オラクル攻撃](https://crypto.stackexchange.com/q/18185/13022)のような攻撃が不可能になるように、暗号文を認証する方が良いです。これは、GCMやEAXのような認証されたモード、または[encrypt-then-MAC](https://crypto.stackexchange.com/q/202/13022)スキームで行うことができます。 –

答えて

1

まあの解決私を助けてください側。それはサポートされていません。

gwt-cryptoを使用して、必要なものを暗号化/復号化します。

GWT-cryptoのGWTではクライアント側でAESがサポートされていませんが、TripleDESを使用できます。 TripleDESは非常に安全な実装です。

+0

あなたの問題を解決しましたか? – nagendra547

+0

あなたが提供したリンクはDESアプローチを使用しています。私は既にDES実装のapporachを持っていますが、私はAESを使用して実装する必要があります。 –

+0

クライアント側でJavaのAES解読をサポートするライブラリがないので、JSNIを使用して同じものを実装する必要があります。私は正しいですか? –

関連する問題