[英]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.