我在服務器端加密會話Id,但是當我試圖在客戶端解密會話ID時,會出現一些錯誤。請任何人都可以幫助解決這個錯誤。使用java在客戶端解密使用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;
}
即未來的錯誤是: 類「javax.crypto.Cipher中」不存在於JRE仿真庫,因此它不能在「一些」 GWT模塊的客戶機代碼來使用。
此檢查報告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將代碼移動到服務器端(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)。最好對密文進行身份驗證,以便像[padding oracle attack](https://crypto.stackexchange.com/q/18185/13022)這樣的攻擊是不可能的。這可以通過驗證模式(如GCM或EAX)或[加密 - 然後MAC](https://crypto.stackexchange.com/q/202/13022)方案完成。 –