gpt4 book ai didi

Java cipherinputstream 将所有输入数据变为0

转载 作者:行者123 更新时间:2023-11-29 08:50:10 25 4
gpt4 key购买 nike

我正在编写一个使用 RSA 密码和 AES 密码的公钥和私钥加密算法的实现。在此方法中,AES key 应该使用 RSA CipherInputStream 解密。

public void loadKey(File in, byte[] privateKey) throws GeneralSecurityException, IOException {

PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKey);
KeyFactory kf = KeyFactory.getInstance("RSA");
PrivateKey pk = kf.generatePrivate(privateKeySpec);
rsacipher.init(Cipher.DECRYPT_MODE, pk);

aesKey = new byte[128/8];
FileInputStream fis = new FileInputStream(in);
CipherInputStream input = new CipherInputStream(fis, rsacipher);
input.read(aesKey);
aesKeySpec = new SecretKeySpec(aesKey, "AES");
input.close();
fis.close();
}

FileInputStream 为我提供了编码 key (这不是问题所在)但是当通过 CipherInputStream 时,数据变为全零。

aesKey 和 aesKeySpec 是静态变量,privateKey 是有效的 RSA key 。

如果您能帮助找到问题,我们将不胜感激!

最佳答案

查看源代码,CipherInputStream 在处理加密层抛出的异常方面做得很好。我会完全避免使用它来支持简单的 Cipher 对象,例如

byte[] fileData = FileUtils.readFileToByteArray(in); // from commons-lang
Cipher c = new Cipher("RSA/None/PKCS1Padding");
c.init(Cipher.DECRYPT_MODE, pk);
aesKey = c.doFinal(fileData);
// etc.

关于Java cipherinputstream 将所有输入数据变为0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23113242/

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