私はサーバー側でセッション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標準の暗号化ライブラリを使用することはできませんエラー
提案(回答ではありません)です。 GWTを使用している場合、コードをサーバー側(RPC)に移動します。そうすればエミュレーションの必要はありません。おそらく、あなたはクライアント側でJDKを使うことができます。 –
** [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)スキームで行うことができます。 –