火曜日, 15 2 月 2005
| javax.cryptoパッケージによる暗号化/複合化 |
|
|
Web系のシステムを作っていてよくあるのが乱数をキーとして個人情報を特定する場面。
ユニークな乱数を発行してそれを個人情報と一緒に保存するのが一般的だが、既存項目の情報を暗号化してそれをキーとして扱うことも出来る。
それを可能にするのがjavax.cryptoパッケージだ。
このパッケージ以下には秘密鍵の実装や暗号化/複合化を行うクラスが含まれる。
使用可能なアルゴリズムにはAES,Blowfish,DES,RSAなどがあるが以下のサンプルではDESede(トリプルDES)を使った。
またバイト配列を16進文字列に変換するためCommons Codecを使用した。
これを同じキーで複合化すると"sample"という文字列に戻すことが可能だ。
ユニークな乱数を発行してそれを個人情報と一緒に保存するのが一般的だが、既存項目の情報を暗号化してそれをキーとして扱うことも出来る。
それを可能にするのがjavax.cryptoパッケージだ。
このパッケージ以下には秘密鍵の実装や暗号化/複合化を行うクラスが含まれる。
使用可能なアルゴリズムにはAES,Blowfish,DES,RSAなどがあるが以下のサンプルではDESede(トリプルDES)を使った。
またバイト配列を16進文字列に変換するためCommons Codecを使用した。
//暗号化
String value="sample"; //暗号対象文字列
String key="ABCDEFGHIJKLMNOPQRSTUVWX"; //キー(24バイト)
SecretKeyFactory keyFac = SecretKeyFactory.getInstance("DESede");
DESedeKeySpec keySpec = new DESedeKeySpec(key.getBytes());
SecretKey secKey = keyFac.generateSecret(keySpec);
Cipher encoder = Cipher.getInstance("DESede");
encoder.init(Cipher.ENCRYPT_MODE,secKey);
byte[] b = encoder.doFinal(value.getBytes());
System.out.println(new String(Hex.encodeHex(b)));
//複合化
String value="2aee0c344a792f57"; //複合化対象文字列
String key="ABCDEFGHIJKLMNOPQRSTUVWX"; //キー(24バイト)
SecretKeyFactory keyFac = SecretKeyFactory.getInstance("DESede");
DESedeKeySpec keySpec = new DESedeKeySpec(key.getBytes());
SecretKey secKey = keyFac.generateSecret(keySpec);
Cipher decoder = Cipher.getInstance("DESede");
decoder.init(Cipher.DECRYPT_MODE,secKey);
byte[] b = Hex.decodeHex(value.toCharArray());
System.out.println(new String(decoder.doFinal(b)));
上記サンプルの暗号化を行うと"sample"という文字列が暗号化され"2aee0c344a792f57"となる。これを同じキーで複合化すると"sample"という文字列に戻すことが可能だ。
Posted by at 2:11 午前 in Java/






