我正在尝试使用由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();
答案 0 :(得分:4)
这些片段之间的唯一区别在于,在第一种情况下,您在关闭流之前检查内容,而在第二种情况下 - 在关闭之后。所以,我想你需要在检查之前关闭流。
答案 1 :(得分:0)
问题在于密码。
Cipher cipher = Cipher.getInstance("RSA");
没有填充。 使用
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
代替