10. ストリームによる暗号化
2006.11.10 株式会社四次元データ 里見玲爾
JCE 10章 ストリームによる暗号化
- 10.1. CipherInputStream
- 10.2. CipherOutputStream
この章ではストリームを使って暗号化を行う方法について解説します。 ストリームによる暗号化は、ストリームにCipherオブジェクトを埋め込んで行います。
10.1. CipherInputStream
javax.crypto.CipherInputStreamは通過するデータの暗号化や復号化を行うInputStreamで、java.io.FilterInputStreamの下位クラスです。
CipherInputStreamはFilterInputStreamやInputStreamのセマンティクス(特にエラー時)に厳密に従います。
CipherInputStreamに渡すCipherオブジェクトは事前に初期化されている必要があります。以下に例を挙げます。
(略) Cipher cipher = Cipher.getInstance("DES"); KeyGenerator keyGen = KeyGenerator.getInstance("DES"); keyGen.init(56); SecretKey key = keyGen.generateKey(); cipher.init(Cipher.ENCRYPT_MODE, key); FileInputStream fis = new FileInputStream("in.txt"); CipherInputStream cis = new CipherInputStream(fis, cipher); FileOutputStream fos = new FileOutputStream("out.txt"); byte[] a = new byte[8]; int i = cis.read(a); while(i != -1){ fos.write(a, 0, i); i = cis.read(a); } (略)
上の例ではin.txtの内容をDESによって暗号化し、out.txtに書き込みます。
10.2. CipherOutputStream
javax.crypto.CipherOutputStreamは通過するデータの暗号化や復号化を行うOutputStreamで、java.io.FilterOutputStreamの下位クラスです。
CipherOutputStreamも同様に、FilterOutputStreamやOutputStreamのセマンティクス(特にエラー時)に厳密に従います。
CipherOutputStreamに渡すCipherオブジェクトは事前に初期化されている必要があります。以下に例を挙げます。
(略) Cipher cipher = Cipher.getInstance("DES"); KeyGenerator keyGen = KeyGenerator.getInstance("DES"); keyGen.init(56); SecretKey key = keyGen.generateKey(); cipher.init(Cipher.ENCRYPT_MODE, key); FileInputStream fis = new FileInputStream("in.txt"); FileOutputStream fos = new FileOutputStream("out.txt"); CipherOutputStream cos = new CipherInputStream(fos, cipher); byte[] a = new byte[8]; int i = fis.read(a); while(i != -1){ cos.write(a, 0, i); i = fis.read(a); } cos.flush(); (略)
上の例は10.1の例と同じでin.txtの内容をDESによって暗号化し、out.txtに書き込みます。