パスワードの照合などによく用いられるのがハッシュアルゴリズム,またはダイジェストと呼ばれる関数です。ここでは,広く利用されているハッシュアルゴリズムのMD5を使う方法を紹介します。
ハッシュアルゴリズムとは,データの全体を反映した別のデータを作るアルゴリズムのことです。ダイジェストとも呼ばれます。データが1ビットでも異なれば,それを反映するハッシュデータも異なる値になります。また,逆方向の変換ができないことも特徴の1つです。計算する過程で情報の一部を意図的に欠落させます。こうすることにより,ハッシュ値から元データを復元できなくすることに大きな特徴があります。
ハッシュは,大きなデータから小さなハッシュを作ることで「チェックサム」として使うこともあります。この用途には,CRCのようなアルゴリズムも一般的に使われます。
ハッシュはまた,パスワード照合にも使われます。ハッシュから元データが復元できないため,仮にハッシュが漏れても,パスワードが漏れることを防げます。
このような特徴を持つため,セキュリティの機能の一部として使われることが多いのですが,暗号化とは少し役割が異なる点に注意してください。
MD5ダイジェストは次のようにして用います。
一度利用したインスタンスを再利用する場合は初期化が必要です。また,ダイジェスト値を計算するバッファがストリームのようになっている場合は,更新処理をループで繰り返すことができます。
次の例は,ファイルから読み込んだストリームでMD5ダイジェスト値を生成するサンプルです。この例では変数filenameがファイル名を表しています。
java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5"); md.reset(); java.io.FileInputStream fis = new java.io.FileInputStream(filename); int read = 0; byte[] buffer = new byte[1028]; while (-1 != (read = fis.read(buffer))) { md.update(buffer, 0, read); } byte[] expectedDigest = md.digest();
バイト列になっていることからもわかるように,これで得られたハッシュ値は表示には適しません。そのため,出力時には適当な形にフォーマットする必要があります。
JAVA Developerより毎週Java Tipsをお届けしましょう。バックナンバーもよろしく。
Copyright(C) 2010 SOFTBANK Creative Inc. All Right Reserved.