Loading [MathJax]/extensions/tex2jax.js

2011-10-07

Javaにてパスワード情報をMD5で暗号化する

パスワードによりユーザ管理をするシステムを開発する場合、ユーザ名とパスワードはデータベースで管理しますが、パスワードをそのままデータベースに格納するのは愚の骨頂です。通常は
  • 不可逆な暗号でパスワードを暗号化し、データベースに保存
  • 認証をする際は入力されたパスワードを同じ方式で暗号化し、その結果を元にデータベース参照する
という方法をとります。そこで、Javaでパスワードを暗号化する方法を紹介します。今回はできるだけJavaの標準のライブラリを利用する方法を採用し、MD5で暗号化する方法を紹介します。

下記のプログラムは2つのメソッドがありますが、上記が今回の本題です。MessageDigiestクラスを利用して、MD5形式で暗号化しています。ここで問題なのは、digestメソッドで生成されるのがbyte型配列であるということ。2つの目のメソッドはbyte型を16進表記のStringに変えるメソッドです。これを利用することで扱いやすくなります。
なお、掲載しているサンプルコードは下記のサイトのコードを引用させてもらいました。
参考サイト: [Java]MD5、DESで暗号化する(Creative Gear とあるWebエンジニアの活動記録)
public String encodePassdigiest(String password){
byte[] enclyptedHash=null;
// MD5で暗号化したByte型配列を取得する
MessageDigest md5;
try {
md5 = MessageDigest.getInstance("MD5");
md5.update(password.getBytes());
enclyptedHash = md5.digest();
// 暗号化されたByte型配列を、16進数表記文字列に変換する
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bytesToHexString(enclyptedHash);
}
private String bytesToHexString(byte[] fromByte) {
StringBuilder hexStrBuilder = new StringBuilder();
for (int i = 0; i < fromByte.length; i++) {
// 16進数表記で1桁数値だった場合、2桁目を0で埋める
if ((fromByte[i] & 0xff) < 0x10) {
hexStrBuilder.append("0");
}
hexStrBuilder.append(Integer.toHexString(0xff & fromByte[i]));
}
return hexStrBuilder.toString();
}


0 件のコメント:

コメントを投稿