我在使用AES解密邮件时遇到问题。最后,当我期待一条消息,例如
ala123
而不是我收到的那样:
...6�b}\7�k�8�vFP�8~%��_zժF��FW��O_e���ó������������ala123
我传递给加密的消息构建为:
问题是为什么最后我最终得到了我预期的信息,但是在开始时有很多垃圾字符?
我的加密代码是:
private static final String AES_TOKEN = "my_very_secret_token";
// encrypted is base64 string
public String decrypt(String encrypted) throws Exception {
byte[] decrypted = Base64.getDecoder().decode(encrypted);
return new String(aesDecrypt(decrypted), "UTF-8");
}
private byte[] aesDecrypt(byte[] message) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] token = MessageDigest.getInstance("SHA-256").digest(AES_TOKEN.getBytes());
SecretKeySpec secretKey = new SecretKeySpec(token, "AES");
IvParameterSpec iv = new IvParameterSpec(Arrays.copyOf(message, 16));
cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
return cipher.doFinal(message);
}
答案 0 :(得分:3)
在将message
读入iv
之后,您似乎没有从.charAt(int)
开始删除IV。这可以解释解密消息开始时的垃圾。