我正在開發一個項目,我需要向用戶發送驗證鏈接。所以使用AES加密來加密他的用戶名。我的代碼工作正常,即加密和解密工作正常,但只在程序中,當我測試它。我加密了一個字符串,然後解密它。它在當地很好地工作。AES中的差異填充異常
的問題是,當我發送電子郵件激活鏈接,點擊它,它給我的錯誤:
javax.crypto.BadPaddingException: Given final block not properly padded
我的代碼如下所示:
public class AES {
private static final String algo="AES";
private static final byte[] keyValue=
new byte[]{somekey};
private static Key generateKey() throws Exception{
Key key= new SecretKeySpec(keyValue, algo);
return key;
}
public static String encrypt(String email) throws Exception{
Key key=generateKey();
Cipher c=Cipher.getInstance(algo);
c.init(Cipher.ENCRYPT_MODE, key);
byte[] encVal=c.doFinal(email.getBytes());
String encryptedEmail= new BASE64Encoder().encode(encVal);
return encryptedEmail;
}
public static String decrypt(String encryptedEmail) throws Exception{
Key key=generateKey();
Cipher c=Cipher.getInstance(algo);
c.init(Cipher.DECRYPT_MODE, key);
byte[] decodeEmail= new BASE64Decoder().decodeBuffer(encryptedEmail);
byte[] decodedEmail=c.doFinal(decodeEmail);
String decryptedEmail= new String(decodedEmail);
return decryptedEmail;
}
}
有沒有人會幫助我?請緊急! – kunal18 2012-07-21 09:37:02
無論何時出現任何錯誤的算法輸入(在您的案例中爲密鑰或密文),都會拋出BadPaddingException。您是否比較了基礎64編碼/解碼的輸出?您不應該使用內部Sun類,而應嘗試使用Bouncy Castle或Apache庫。 – 2012-07-21 10:31:00
你解決了這個問題嗎?如果是這樣,你能指出做了什麼並且接受或發佈了答案嗎? – 2012-07-30 00:11:15