2011-01-14 165 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"); 

代替