如何使用java密码aes-cbc

时间:2016-02-13 05:56:18

标签: java encryption aes

我使用密码AES-cbc。我有一个加密的thrid部分字符串和一个密钥。

我想问一些问题,

当我解密时,我得到了异常

javax.crypto.BadPaddingException: Given final block not properly padded
  at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
  at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
  at com.sun.crypto.provider.AESCipher.engineDoFinal(DashoA13*..)

我在论坛中读到这可能是因为加密密钥和解密密钥是不同的。这可能发生在我的问题中吗?。

我如何使用cbc我需要一个iv矢量。但我不知道iv矢量加密了。我需要这个载体吗?我怎么能得到我?

2 个答案:

答案 0 :(得分:0)

CBC代表Cipher Block Chaining,这意味着加密一个数据块的输出与下一个输入块进行异或。对于第一个块,随机输入一个随机数据块(称为IV)。 IV应该只是随机数据,并在执行加密时生成。你肯定需要IV,没有办法恢复它。你只能从生成它的人那里得到它。没有正确的IV几乎肯定是填充异常的原因。

答案 1 :(得分:0)

填充错误通常意味着解密失败但不能依赖于确定正确的解密,并且如果报告给调用者可以创建填充oracle,可用于在没有密钥的情况下恢复原始文本。这可能是因为填充方法,模式,密钥或iv对于加密和解密而言并不相同。

最好是密钥和iv完全匹配要求,iv长度与AES为16字节的块相同。密钥可以是128位(16字节),192位(24字节)或256位(32字节)。

对于CBC模式,需要iv,最佳做法是生成随机iv并将其添加到加密数据中,以允许解密具有相同的iv。 iv不需要保密。

相关问题