ハッシュ計算(入力を byte 配列とする場合)

MessageDigest#update() の入力が,元から byte 配列だったから簡単だった.String#getBytes() でなく,単に org を入れるだけになった.

さて,多次元配列の時はどうしたら良いんだろう.

Java の配列は C/C++ とは違っているんだって.知らなかった.それなら一次元配列のままでいいや.

public static String getHash(byte[] org, String algorithm){
    // 引数・アルゴリズム指定が無い場合は計算しない
    if ((org== null)||(algorithm== null)){
        return null;
    }

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

    md.update(org);
    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();
}