2011-01-14 164 views
4

我试图加密一个字符串,并使用CipherOutputStream存储加密的字节在字节原始数组中使用ByteArrayOutputStream支持,但ByteArrayOutputStream对象的大小保持为零,并且在将某些内容写入CipherOutputStream对象后,它不会认可任何字节。这是代码。为什么CipherOutputStream不能写入ByteArrayOutputStream?

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(); 

所以我尝试用下面的代码改变ByteArrayOutputStreamFileOutputStream做一个对比。事实证明,加密的字节被写入目标文件。有没有人有任何想法,为什么我不能在这里使用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(); 

回答

4

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

+0

即使我刷新,它仍然是空的。最初,我不使用`PrintWriter`,而是直接将它写入`CipherOutputStream`,这也是相同的。这就是为什么我很沮丧。 – gigadot 2011-01-14 16:53:43

0

问题是密码。

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

没有填充。 使用

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

代替