gpt4 book ai didi

java - 密码 : What is the reason for IllegalBlockSizeException?

转载 作者:太空狗 更新时间:2023-10-29 22:47:04 25 4
gpt4 key购买 nike

我在使用 Cipher 时观察到以下情况.

加密代码:

Cipher aes = Cipher.getInstance("AES");
aes.init(Cipher.ENCRYPT_MODE, generateKey());
byte[] ciphertext = aes.doFinal(rawPassword.getBytes());

解密代码:

Cipher aes = Cipher.getInstance("AES");
aes.init(Cipher.DECRYPT_MODE, generateKey());
byte[] ciphertext = aes.doFinal(rawPassword.getBytes());

我在运行解密代码时遇到 IllegalBlockSizeException(输入长度​​必须是 16 的倍数...)。

但是如果我将解密代码更改为

Cipher aes = Cipher.getInstance("AES/ECB/PKCS5Padding"); //I am passing the padding too
aes.init(Cipher.DECRYPT_MODE, generateKey());
byte[] ciphertext = aes.doFinal(rawPassword.getBytes());

它工作正常。我知道它在模式 algorithm/mode/padding 中。所以我认为这是因为我没有提到填充。所以我尝试在加密过程中给出模式和填充,

加密代码:

Cipher aes = Cipher.getInstance("AES/ECB/PKCS5Padding");//Gave padding during encryption too
aes.init(Cipher.ENCRYPT_MODE, generateKey());
byte[] ciphertext = aes.doFinal(rawPassword.getBytes());

解密代码:

Cipher aes = Cipher.getInstance("AES/ECB/PKCS5Padding");
aes.init(Cipher.DECRYPT_MODE, generateKey());
byte[] ciphertext = aes.doFinal(rawPassword.getBytes());

但它因 IllegalBlockSizeException 而失败。

是什么原因,为什么会出现异常,下面到底发生了什么。如果有人可以帮忙?提前致谢

更新

看起来问题出在我正在加密和解密的字符串上。因为,即使我所说的代码有效,也并不总是有效。我基本上是在加密 UUID(例如:8e7307a2-ef01-4d7d-b854-e81ce152bbf6)。它适用于某些字符串,但不适用于某些其他字符串。

加密后的字符串长度为64,可以被16整除。是的,我在同一台机器上运行。

key 生成方法:

    private Key generateKey() throws NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("SHA");
String passphrase = "blahbl blahbla blah";
digest.update(passphrase.getBytes());
return new SecretKeySpec(digest.digest(), 0, 16, "AES");
}

最佳答案

在解密过程中,如果输入数据不是 block 大小的倍数(AES 为 16 字节),则只能得到一个IllegalBlockSizeException

如果 key 或数据无效(但长度正确),您将收到 BadPaddingException,因为明文中的 PKCS #5 填充是错误的。极少数情况下,填充会偶然出现正确,您也不会有任何异常(exception)。


注意我建议您始终指定填充和模式。否则,如果提供商更改默认设置,您可能会感到惊讶。据我所知,Sun 提供商将 "AES" 转换为 "AES/ECB/PKCS5Padding"

关于java - 密码 : What is the reason for IllegalBlockSizeException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16192140/

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