2011-01-14 26 views
4

文字列を暗号化して、ByteArrayOutputStreamでバックアップされたCipherOutputStreamを使用してプリミティブなバイト配列に暗号化バイトを格納しようとしていますが、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(); 

だから私は以下のコードを使用してFileOutputStreamByteArrayOutputStreamを変更することにより、比較を作ってみました。暗号化されたバイトがターゲットファイルに書き込まれることが判明しました。なぜ私は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

これらのスニペットの唯一の違いは、最初のケースでは2番目のケースでは、一方のストリームを閉じる前に内容を確認することです。だから、私はあなたがチェックする前にストリームを閉じる必要があると思います。

+0

使用

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

が、それはまだ空です。もともと、私は 'PrintWriter'を使用しませんが、' CipherOutputStream'に直接書き込みます。これが私がとても不満を感じている理由です。 – gigadot

+0

@gigadot:とにかく、内容を確認する前にストリームを閉じようとしましたか? – axtavt

+0

はい、それは動作しますが、なぜですか?私は、フラッシュメソッドが存在する理由がないなら、フラッシングが同じことをしなければならないと考えましたか?とりあえずありがとう。 – gigadot

0

問題は暗号です。

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

パディングなし。私はフラッシュ場合でも、代わりに

関連する問題