メモ: Webアプリのパスワードを扱うためのハッシュ化

Webアプリケーションのログインに使うユーザパスワードは、安全のため、平文のままデータベースに保存してはいけません。保存するのは、ハッシュ化した値を利用します。保存したデータと、ユーザが入力した文字列をハッシュ化したものを突き合せて、認証を行います。

…というよくあることをJavaでしたいのですが、commons-codecとか、Jasyptとか、よのなか的には使うのでしょうか?(わからない。。。)

わからない場合は基本から、ということで、標準ライブラリを使うメモです。

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class HashedPass {

	protected BigInteger stringToDigest(String str)
			throws NoSuchAlgorithmException {

		MessageDigest md = MessageDigest.getInstance("SHA-256");

		byte[] bytes = str.getBytes();
		md.update(bytes);

		return new BigInteger(md.digest());
	}
}

アルゴリズムは、「CRYPTREC | CRYPTREC暗号リスト(電子政府推奨暗号リスト)」を参考に、SHA-256を選択しています。

テスト。

ちなみに、@ITさんの解説は、こんな感じです。

ついでに、勉強になりそうなサイトを発見。