« BacthModifyPluginが機能しなくなる | Main | byteaデータの書き込み »

2009.02.14

暗号化してから圧縮するか、圧縮してから暗号化するか

 Javaにおいては、圧縮用のストリーム(ZipOutputStream/GZIPOutputStream)も、暗号化用のストリーム(CipherOutputStream)も両方とも標準で提供されています。いずれも、コンストラクタでOutputStreamを指定することができるので、「暗号化してから圧縮」も「圧縮してから暗号化」も簡単に切り替えることができます。

【暗号化してから圧縮】

new CiperOutputStream(new GZIPOutputStream(new ByteArrayOutputStream()), Cipher)

【圧縮してから暗号化】

new GZIPOutputStream(new CipherOutputStream(new ByteArrayOutputStream(), Cipher))

 外側にあるストリームから順番に処理されていくこととなります。ちなみに、暗号化することによりかなりランダムなバイト配列になってしまうため、前者の方だとほとんど圧縮が効かなくなってしまうというケースが多いかもしれません。実際、手元にある約6KBのテキストファイルで試したところ(暗号化はAES)、前者だとファイルサイズは数バイト大きくなりました(後者は約1/2のサイズに)。

 当然ながら、復号化する場合も順番を考慮しなければなりません。圧縮してから暗号化したデータを読み取る(=復号化してから展開する)場合は、

new GZIPInputStream(new CipherInputStream(new ByteArrayInputStream(byte[]), Cipher))

のような感じになります(入力の場合は、内側のストリームから順番に処理されます)。

|

« BacthModifyPluginが機能しなくなる | Main | byteaデータの書き込み »

Java」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/44054887

Listed below are links to weblogs that reference 暗号化してから圧縮するか、圧縮してから暗号化するか:

« BacthModifyPluginが機能しなくなる | Main | byteaデータの書き込み »