gpt4 book ai didi

java - CipherInputStream 从不抛出异常

转载 作者:太空宇宙 更新时间:2023-11-04 07:16:17 26 4
gpt4 key购买 nike

我有一个类似的方法。它工作正常,但问题是当我尝试解密填充错误甚至根本未加密的文件时。通常我相信 cipher.doFinal(..) 通常会抛出一些与 IllegalBlockSizeException 相关的异常,BadPaddingException。我相信这是由于掩盖了这些异常,如 here 中所示。我的问题是我可以检测到这些异常情况吗?

public myDecryptMethod(byte[] sessionKey, FileInputStream encryptedFileStream) throws Exception{
....
SecretKeySpec symmKeySpec = new SecretKeySpec(sessionKey, "AES/CBC/PKCS5Padding");
Cipher symmCipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
IvParameterSpec ivParameterSpec = new IvParameterSpec("0000000000000000".getBytes());
symmCipher.init(Cipher.DECRYPT_MODE, symmKeySpec, ivParameterSpec);

CipherInputStream cis = new CipherInputStream(encryptedFileStream, symmCipher);

byte[] inputByteArray = new byte[10240];
ByteArrayOutputStream outStream = new ByteArrayOutputStream();

while (true) {
int length = cis.read(inputByteArray);
if (length < 0)
break;
outStream.write(inputByteArray, 0, length);
}

outStream.close();
byte[] data = outStream.toByteArray();
InputStream inStream = new ByteArrayInputStream(data);

cis.close();

return inStream;
}

最佳答案

在 bouncycaSTLe-dev 和 openjdk-security 中已经对此进行了讨论。甲骨文thinks这是预期的行为,并且 JCE 的密码不会在关闭时进行身份验证检查,因此认为它是安全的。

BC 密码的行为有所不同,因为它们允许传输和(并释放未经身份验证的数据)。

您的选择是使用 BC 流 org.bouncycaSTLe.crypto.io.CipherInputStream 代替。他们修复了流(>1.50)。 Phillipp wrote一个关于这一切的好博客。

关于java - CipherInputStream 从不抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19929552/

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