为什么CipherOutputStream无法写入ByteArrayOutputStream?

时间:2011-01-14 16:43:28

标签: java encryption

我正在尝试使用由CipherOutputStream支持的ByteArrayOutputStream来加密字符串并将加密的字节存储在原始字节数组中,但ByteArrayOutputStream对象的大小保持为零并且它确实为零在将某些内容写入CipherOutputStream对象后,不保留任何字节。这是代码。

ByteArrayOutputStream out = new ByteArrayOutputStream();
CipherOutputStream cos = new CipherOutputStream(out, c);
PrintWriter pw = new PrintWriter(cos);
pw.println("Write something");
cos.flush();
out.flush();
System.out.println(out.size());
pw.close();

因此,我尝试使用以下代码将ByteArrayOutputStream更改为FileOutputStream进行比较。事实证明,加密的字节被写入目标文件。有谁知道为什么我不能在这里使用ByteArrayOutputStream?你能建议一个解决方案吗?

FileOutputStream out = new FileOutputStream("/path/encrypted.txt");
CipherOutputStream cos = new CipherOutputStream(out, c);
PrintWriter pw = new PrintWriter(cos);
pw.println("Write something");
pw.close();

2 个答案:

答案 0 :(得分:4)

这些片段之间的唯一区别在于,在第一种情况下,您在关闭流之前检查内容,而在第二种情况下 - 在关闭之后。所以,我想你需要在检查之前关闭流。

答案 1 :(得分:0)

问题在于密码。

  Cipher cipher = Cipher.getInstance("RSA");

没有填充。 使用

 Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

代替