gpt4 book ai didi

java - CipherInputStream 和 CipherOutputStream 不生成文件

转载 作者:行者123 更新时间:2023-12-01 23:56:49 25 4
gpt4 key购买 nike

我有以下代码。但是,文件 b.xlsxc.xlsx 的大小为 0 字节。为什么CipherOuputSteam不工作?

public static void main(String[] args) throws Exception {

KeyPair keys = KeyPairGenerator.getInstance("RSA").generateKeyPair();
Cipher cipher = Cipher.getInstance("RSA");

cipher.init(Cipher.ENCRYPT_MODE, keys.getPublic());

FileInputStream fis;
FileOutputStream fos;
CipherOutputStream cos;

fis = new FileInputStream("C:/temp/a.xlsx");
fos = new FileOutputStream("C:/temp/b.xlsx");

cos = new CipherOutputStream (fos, cipher);

byte[] block = new byte[8];
int i;
while ((i = fis.read(block)) != -1) {
cos.write(block, 0, i);
}
cos.close();
fos.close();



cipher.init(Cipher.DECRYPT_MODE, keys.getPrivate());
CipherInputStream cis1, cis2;
fis = new FileInputStream("c:/temp/b.xlsx");
CipherInputStream cis = new CipherInputStream(fis, cipher);
fos = new FileOutputStream("c:/temp/c.xlsx");

while ((i = cis.read(block)) != -1) {
fos.write(block, 0, i);
}
fos.close();
fis.close();
cis.close();
}

最佳答案

问题在于您的使用 - 这是不正确的,并且在于 CipherOutputStream 的实现,它掩盖了一个非常重要的异常 - IllegalBlockSizeException

问题是您无法使用 RSA key 来加密长度超过 key 大小(在示例中为 128 字节)的数据。您应该对大数据 block 使用对称加密算法 - 例如AES

如果您出于某种原因想要使用非对称 key (例如安全传输数据) - 您可以在 SO answer 上找到一个很好的示例.

关于java - CipherInputStream 和 CipherOutputStream 不生成文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15470222/

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