我正在尝试在 java 中使用 CBC 模式实现 3DES 加密/解密。
初始化向量是 0000000000000000
加密字符串是 DD446C051A83BFD98144C348935C61D81398CF29CCFE1CCD
解密密钥是 DCBA4F836E45BAB04FAB2937454075D9
我收到以下错误。任何帮助都感激不尽。谢谢。
java.security.InvalidAlgorithmParameterException: Wrong IV length: must be 8 bytes long
代码:
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.IvParameterSpec;
import org.apache.commons.codec.binary.Base64;
public class DES3 {
private static final String IV = "01234567";
private static final String CHARSET = "utf-8";
public static String decrypt(String iv, String secretKey, String encryptText) throws Exception {
DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes());
SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
Key deskey = keyfactory.generateSecret(spec);
Cipher cipher = Cipher.getInstance("desede/CBC/PKCS5Padding");
IvParameterSpec ips = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.DECRYPT_MODE, deskey, ips);
byte[] decryptData = cipher.doFinal(Base64.decodeBase64(encryptText));
return new String(decryptData, CHARSET);
}
public static String decrypt(String secretKey, String encryptText) throws Exception {
return decrypt(IV, secretKey, encryptText);
}
public static void main(String[] args) {
try {
String iv="0000000000000000";
System.out.println("iv size"+iv.getBytes("UTF8").length);
decrypt(iv, "DCBA4F836E45BAB04FAB2937454075D9", "DD446C051A83BFD98144C348935C61D81398CF29CCFE1CCD");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}