我正在使用 AES 来加密和解密我的密码。我要实现的是,我需要以 cookie 的形式将加密密码存储在客户端,然后当客户端再次登录到我的网站时,我需要从客户端获取加密密码并解密它会根据客户端提供的未加密密码进行检查。我面临的问题是,在加密时,我使用 java 中的 BASE64.encodeString() 将加密密码的字节数组转换为字符串,以便将其传递给客户端。但是,当我从客户端(即从 cookie 中)获得相同的字符串并尝试对其进行解密时,它给了我填充错误,即 javax.crypto.illegalBlockSizeException :使用填充密码解密时,输入长度必须是 16 的倍数。
为什么会这样?
加密代码:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivspec);
byte[] plainBytes = Data.getBytes(UNICODE_FORMAT);
byte[] encrypted = cipher.doFinal(plainBytes);
String encryption = Base64.encodeBase64String(encrypted);
return encryption;
解密代码:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivspec);
byte[] decryptval = Base64.decodeBase64(encryptedData);
byte[] decrypted = cipher.doFinal(decryptval);
return new String(decrypted);
错误是因为我将加密字符串传递给 js 以存储在 cookie 中。??JS 会摆弄 base64 编码的字符串吗?