Java で、ハッシュ値 (ハッシュダイジェスト) を扱う

Java で、ハッシュ値(ハッシュダイジェスト)を扱うには、例えば以下のようにする。

使用するクラス


import java.security.MessageDigest;
import java.security.MessageDigest; public class HashTest {
public static final String HASH_ALGORITHM = "SHA1";
// public static final String HASH_ALGORITHM = "MD5";
public static final String password = "password";

public static void main(String[] args){

    try {
        password =  this.getDigest(password);
    } catch(Exception e) {
e.printStackTrace();
    }
}

public String getDigest(String data) throws Exception {

    StringBuffer s = new StringBuffer();
    MessageDigest md = MessageDigest.getInstance(HASH_ALGORITHM);
    byte[] dat = data.getBytes();
    md.update(dat);

    byte[] digest = md.digest();
    for (int i = 0; i < digest.length; i++) {
        int d = digest[i];

        if (d < 0) {  // byte 128-255
            d += 256;
        }
        if (d < 16) { //0-15 16
            s.append("0");
        }
        s.append(Integer.toString(d, 16));
    }
    return s.toString();
}
}
public static final String HASH_ALGORITHM = "SHA1"; // public static final String HASH_ALGORITHM = "MD5"; ... MessageDigest md = MessageDigest.getInstance(HASH_ALGORITHM);

のように、MessageDigest オブジェクトのインスタンス取得のときにハッシュアルゴリズムを指定することができる。また、

byte[] digest = md.digest();

だけでは、byte[] しか返ってこないので、ダイジェスト値を文字列として扱いたい場合はこのJava のバイト列を文字列に変換する必要がある。

Comments