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に書き込みます。

