繁体   English   中英

如何使用Java密码Aes-cbc

[英]how to work java cipher aes-cbc

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

我想问一些问题,

当我解密时,我得到了例外

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向量是加密的。 我需要这个向量吗? 我怎么能得到我?

CBC代表密码块链接,这意味着加密一个数据块的输出将与下一个输入块进行异或。 对于第一个块,将数据的随机块(称为IV)与输入进行XOR运算。 IV应该只是随机数据,并且是在执行加密时生成的。 您肯定需要IV,并且无法恢复它。 您只能从生成它的任何人那里获取它。 没有正确的IV几乎可以肯定是填充异常的原因。

填充错误通常意味着解密失败,但是不能依靠它来确定正确的解密,如果报告给调用者,则可以创建一个填充预言,该预言可以用于恢复没有密钥的原始文本。 这可能是因为填充方法,模式,密钥或iv对于加密和解密而言是不同的。

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

对于CBC模式,需要一个iv,最佳实践是生成一个随机iv并将其添加到加密数据之前,从而使解密具有相同的iv可用。 iv不必是秘密的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM