3. 暗号化のプログラム例
2006.04.04 株式会社四次元データ 里見玲爾
JCE(Java暗号化拡張機能) 3章 暗号化のプログラム例
- 3.1. 暗号化のプログラム例
3.1. 暗号化のプログラム例
2章ではjavaによる暗号化の流れを大まかに解説しました。この章では実際にプログラム例を見ながら解説します。 まず2章で挙げた大まかな流れを以下にもう1度示しておきます。
- Key, AlgorithmParameters, Cipherオブジェクトをそれぞれ生成する
- Key, AlgorithmParametersオブジェクトを使ってCipherオブジェクトを初期化する
- Cipherオブジェクトを使ってテキストを暗号化(復号化)する
この章では簡単のため、アルゴリズムパラメータを用いない対称鍵暗号化方式であるDESによる暗号化の例を
紹介します。
「Techscore-J2SE-JCE」という文字列を以下のようなコードで暗号化しています。
import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.NoSuchPaddingException; import javax.crypto.BadPaddingException; import javax.crypto.IllegalBlockSizeException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; public class Sample{ public static void main(String args[]) throws InvalidKeyException, NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException{ byte[] cleartext = "Techscore-J2SE-JCE".getBytes(); Cipher cipher = Cipher.getInstance("DES"); KeyGenerator keyGen = KeyGenerator.getInstance("DES"); keyGen.init(56); SecretKey key = keyGen.generateKey(); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] etext = cipher.doFinal(cleartext); System.out.println("暗号化した結果 : " + new String(etext)); } }
cleartextがもとの文字列の符号化表現、etextが暗号化された文字列の符号化表現を表しています。
javaの暗号化に使用するクラスのほとんどはjavax.cryptoパッケージとjava.securityパッケージに
含まれているため、1-8行目でこの2つのパッケージから必要なクラス、インタフェースをインポートしています。
このコードで使用しているクラス、インタフェースは例外を除くとCipher、SecretKey、KeyGeneratorの3つと
いうことになります。KeyGeneratorクラスは鍵を生成するためのクラスで、詳しくは次章で解説します。
2章で挙げた手順1のCipherオブジェクトの生成は24行目、Keyオブジェクトの生成は29行目で行っています。
このKeyオブジェクトを使って32行目で手順2のCipherオブジェクトの初期化し、35行目で手順3の暗号化したあと
37行目で暗号化した結果を出力しています。
それぞれの引数などが気になるところですが、それらは次章以降でじっくり見ていくことにしましょう。
まず次章では鍵を生成するKeyGeneratorクラスについて解説します。