人様のハッシュ計算ソースを組み入れて単体テスト

Javaハッシュ値を求めるために、java.security.MessageDigestクラスを使ったりするが、 ぶっちゃけあんなん求めるのに例外処理だー、アルゴリズムは〜だーなんて 面倒くさいのでラッピングしてみた。

一陣の神風が舞う JAVAのハッシュ関数を簡略化する
  1. ソースパッケージを右クリックし,新規 Java クラスを追加
  2. クラス名「Encrypter」,パッケージ名「mbs.security」
  3. 完了

頂戴したソースに main を合わせ,Shift+F6 で単体実行できる.デバッグしたい場合は Ctrl+Shift+F5.

あれ.byte 配列 とか int 配列 のハッシュが欲しいんだけど.どうしよ.返り値も String でなく,小さな byte 配列 とかでいいんだけど,どうしよ.

Encrypter.java

package mbs.security;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * ハッシュ値生成機能を提供
 * @auther Mahny
 * @see <a href="http://ciablo.blog70.fc2.com/blog-entry-48.html">一陣の神風が舞う  JAVAのハッシュ関数を簡略化する</a>
 */
public class Encrypter {

    /**
     * メッセージダイジェスト:MD5
     */
    public static final String ALG_MD5= "MD5";

    /**
     * メッセージダイジェスト:SHA-1
     */
    public static final String ALG_SHA1= "SHA-1";

    /**
     * メッセージダイジェスト:SHA-256
     */
    public static final String ALG_SHA256= "SHA-256";

    /**
     * メッセージダイジェスト:SHA-384
     */
    public static final String ALG_SHA384= "SHA-384";

    /**
     * メッセージダイジェスト:SHA-512
     */
    public static final String ALG_SHA512= "SHA-512";

    /**
     * ハッシュ値を返す
     * @param org 計算元文字列
     * @param algorithm ハッシュアルゴリズム名(Encrypter.ALG_xxxで取得できる)
     * @return ハッシュ値
     */
    public static String getHash(String org, String algorithm){
        // 引数・アルゴリズム指定が無い場合は計算しない
        if ((org== null)||(algorithm== null)){
            return null;
        }

        // 初期化
        MessageDigest md= null;
        try{
            md= MessageDigest.getInstance(algorithm);
        }
        catch(NoSuchAlgorithmException e){
            return null;
        }

        md.reset();
        md.update(org.getBytes());
        byte[] hash= md.digest();

        // ハッシュを16進数文字列に変換
        StringBuffer sb= new StringBuffer();
        int cnt= hash.length;
        for(int i= 0; i< cnt; i++){
            sb.append(Integer.toHexString( (hash[i]>> 4) & 0x0F ) );
            sb.append(Integer.toHexString( hash[i] & 0x0F ) );
        }
        return sb.toString();
    }

    public static void main(String[] args){

        String value= "password";
        String hash= Encrypter.getHash(value, Encrypter.ALG_SHA1);

        System.out.println("出力結果:" + hash);
    }

}