目次へ

10. ストリームによる暗号化

2006.11.10 株式会社四次元データ 里見玲爾

この章ではストリームを使って暗号化を行う方法について解説します。 ストリームによる暗号化は、ストリームに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に書き込みます。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp