「Java」MessageDigest.getInstance関数でパスワード文字列のハッシュ値を16進数文字列で返すサンプル
説明
1.public static MessageDigest getInstance(String algorithm)throws NoSuchAlgorithmException
指定されたダイジェスト・アルゴリズムを実装するMessageDigestオブジェクトを返します。
2.public StringBuilder(int capacity)
文字を持たず、capacity引数によって指定された初期容量の文字列ビルダーを構築します。
3.public byte[] getBytes()
プラットフォームのデフォルトの文字セットを使用してこのStringをバイト・シーケンスにエンコード化し、結果を新規バイト配列に格納します。
Javaコード
package com.arkgame.study; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class PwdHashDemo { public static final String algorithm = "SHA-256"; public static String getPasswordHash(String target) { if ((target == null) || (algorithm == null)) { return null; } MessageDigest md = null; try { // MessageDigestオブジェクト md = MessageDigest.getInstance(algorithm); } catch (NoSuchAlgorithmException e) { return null; } md.reset(); // ダイジェスト更新 md.update(target.getBytes()); byte[] dgByte = md.digest(); StringBuilder sb = new StringBuilder(2 * dgByte.length); for (byte bt : dgByte) { // 文字列をこの文字シーケンスに追加 sb.append(String.format("%02x", bt & 0xff)); } return sb.toString(); } public static void main(String[] args) { String strPwdA = "12345Te"; // 空白 String strPwdB = ""; // null String strPwdC = null; String pwdHashA = getPasswordHash(strPwdA); System.out.println("文字列Aのハッシュ値を16進数文字列に変換結果: " + pwdHashA); String pwdHashB = getPasswordHash(strPwdB); System.out.println("文字列Bのハッシュ値を16進数文字列に変換結果: " + pwdHashB); // String pwdHashC = getPasswordHash(strPwdC); System.out.println("文字列Cのハッシュ値を16進数文字列に変換結果: " + pwdHashC); } }
結果
文字列Aのハッシュ値を16進数文字列に変換結果: de4eafc85623ee042700c9b782a35640f6f79eb3f7e763011dc12f3cdb84d621
文字列Bのハッシュ値を16進数文字列に変換結果: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
文字列Cのハッシュ値を16進数文字列に変換結果: null