Java AES解密:随机字符&最后的消息

时间:2016-01-04 15:41:50

标签: java encryption cryptography aes

我在使用AES解密邮件时遇到问题。最后,当我期待一条消息,例如

ala123

而不是我收到的那样:

...6�b}\7�k�8�vFP�8~%��_zժF��FW��O_e���ó������������ala123

我传递给加密的消息构建为:

  • 密码密钥是来自AES_TOKEN的SHA-256
  • 密码IV是一些字符,然后存储在消息中(在开始时)
  • 解密的邮件被包装到Base64

问题是为什么最后我最终得到了我预期的信息,但是在开始时有很多垃圾字符?

我的加密代码是:

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);
}

1 个答案:

答案 0 :(得分:3)

在将message读入iv之后,您似乎没有从.charAt(int)开始删除IV。这可以解释解密消息开始时的垃圾。