gpt4 book ai didi

java - 非法 block 大小异常 : Input length must be multiple of 8 when decrypting with padded cipher

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:28:57 30 4
gpt4 key购买 nike

我有以下方法:

public String decrypt(String strToBeDecrypted) {
try {
strToBeDecrypted = URLDecoder.decode(strToBeDecrypted, "UTF-8");
DESKeySpec desKeySpec = new DESKeySpec(key);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey skey = keyFactory.generateSecret(desKeySpec);

IvParameterSpec ivSpec = new IvParameterSpec(iv);

cipher.init(Cipher.DECRYPT_MODE, skey, ivSpec);

byte[] keyByteArray = new BASE64Decoder().decodeBuffer(strToBeDecrypted);

byte[] original = cipher.doFinal(keyByteArray);

return new String(original, "UTF-8");
} catch (Exception e) {
logger.error(ExceptionUtil.getDetailedMessage(e));
}
return "";
}

这是 throw

"name=javax.crypto.IllegalBlockSizeException;message=Input length must be multiple of 8 when decrypting with padded cipher;"

在下面一行:

 byte[] original = cipher.doFinal(keyByteArray);

有人可以告诉我这里有什么问题吗?

最佳答案

它指的输入长度是密文的长度 (strToBeDecrypted),它预计是 block 大小的倍数。这意味着默认情况下,库期望您的输入被填充。

这意味着您要么需要在解密时将填充设置为“无”(因为那是加密时使用的“填充”),要么您以某种方式破坏了密文。

尝试将“DES”更改为“DES/ECB/NoPadding”。我不知道您的实现的默认密码模式是什么,但通常是“ECB”或“CBC”。如果这两者都不起作用,那么您正在沿线某处破坏您的密文。

关于java - 非法 block 大小异常 : Input length must be multiple of 8 when decrypting with padded cipher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17205766/

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