CBC模式下的三重DES:java.security.invalidalgorithParameterException:错误的IV长度:必须为8字节长

CBC模式下的三重DES:java.security.invalidalgorithParameterException:错误的IV长度:必须为8字节长,java,encryption,3des,cbc-mode,block-cipher,Java,Encryption,3des,Cbc Mode,Block Cipher,我试图在java中用CBC模式实现3DES加密/解密初始化向量为0000000000000000 加密字符串是DD446C051A83BFD98144C348935C61D81398CF29CCFE1CD 用于解密的密钥是dcba4f836e45bab04fab29374545075d9 我收到以下错误。 任何帮助都将不胜感激。谢谢 java.security.InvalidAlgorithmParameterException: Wrong IV length: must be 8 bytes

我试图在java中用CBC模式实现3DES加密/解密

初始化向量为0000000000000000
加密字符串是DD446C051A83BFD98144C348935C61D81398CF29CCFE1CD
用于解密的密钥是dcba4f836e45bab04fab29374545075d9

我收到以下错误。 任何帮助都将不胜感激。谢谢

java.security.InvalidAlgorithmParameterException: Wrong IV length: must be 8 bytes long
代码:

你的问题在这里:

 String iv="0000000000000000";
显示你的IV是十六进制字符串。但在解密函数中,您使用:

iv.getBytes()
对于这个IV,这显然超过16字节长您需要将十六进制字符串转换为字节,而不仅仅是使用
getBytes()
函数
getBytes()
将每个聊天转换为相应的ASCII码,这样您将得到一个每个16字节的数组
0x30
,而不是每个8字节的数组
0

顺便说一下,您的密钥和输入也有同样的问题


您可以在这里查看。

1。现在是学习二进制和编码的时候了,比如十六进制(hex)、Base64、ASCII和UTF-8。2.全零的IV(0x00)是不安全的,而是使用随机IV,只需在加密数据前面加上IV以用于解密,它不需要保密。谢谢。我之所以保留这个,是因为我相信3DES解密使用16字节IV。我已经在在线解密程序中解密了代码中的值。它使用16个字节。有什么想法吗?谢谢,请检查链接:@Preetam你错了。DES和3DES的块和IV大小都等于8,而不是16。一个小搜索显示:3DES仅使用DES 3次,它不会改变IV或块大小。另外,在你们发给我的链接中,IV也是8字节。。。
iv.getBytes()