gpt4 book ai didi

java - 三重DES解密: ECB mode cannot use IV

转载 作者:行者123 更新时间:2023-12-01 17:00:53 26 4
gpt4 key购买 nike

我在服务器上有用于解密数据的 Java 代码,我试图在本地运行这些代码以进行一些测试。该代码在服务器上运行良好,但在我的本地构建中引发错误。

ECB mode cannot use IV

    public static String triple_des_decrypt(String key, String data)
{
try
{
//needs to have an even number of digits
if (key.length() % 2 == 1)
{
key = "0" + key;
}
byte[] desKey = Hex.decodeHex(key.toCharArray());

// pad out key for cipher routine
int deskeyLength = desKey.length;
byte[] desKey24 = new byte[24];

int copySize = 16;
if (copySize > deskeyLength)
{
copySize = deskeyLength;
}
System.arraycopy(desKey, 0, desKey24, 0, copySize);

copySize = 8;
if (copySize > deskeyLength)
{
copySize = deskeyLength;
}
System.arraycopy(desKey, 0, desKey24, 16, 8);

DESedeKeySpec keySpec = new DESedeKeySpec(desKey24);
Cipher cipher = Cipher.getInstance("DESede/ECB/NoPadding");
String algo = "DESede";


SecretKey secretKey = SecretKeyFactory.getInstance(algo).generateSecret(keySpec);
IvParameterSpec iv = new IvParameterSpec(new byte[8]);
cipher.init(Cipher.DECRYPT_MODE, secretKey, iv); //Error thrown here
byte[] byteData = Hex.decodeHex(data.toCharArray());
byte[] decryptedData = cipher.doFinal(byteData);

char tempString[] = Hex.encodeHex(decryptedData);
String decryptedString = new String(tempString).toUpperCase();
return decryptedString;
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}

我不熟悉加密,并且不知道为什么会抛出此错误。

编辑cipher.init中删除IV参数解决了这个问题,但我仍然很好奇为什么在不同的环境中没有抛出错误。

最佳答案

ECB 不会在 block 之间执行链接,因此无法使用初始化 vector ( wiki )。因此,您会收到 ECB 模式无法使用 IV 的错误消息

关于java - 三重DES解密: ECB mode cannot use IV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61506526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com