これは上記のAndranikとDen Delimarskyの回答のわずかなバリエーションですが、少し簡潔で、ビットごとのロジックは必要ありません。代わりに、組み込みのString.format
メソッドを使用して、バイトを2つの文字の16進文字列に変換します(0は取り除きません)。通常、私は彼らの答えについてコメントするだけですが、そうする評判はありません。
public static String md5(String input) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
StringBuilder hexString = new StringBuilder();
for (byte digestByte : md.digest(input.getBytes()))
hexString.append(String.format("%02X", digestByte));
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
代わりに小文字の文字列を返したい場合は、に変更%02X
してください%02x
。
編集:BigIntegerをwzbozonの回答と同様に使用すると、回答をさらに簡潔にすることができます。
public static String md5(String input) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
BigInteger md5Data = new BigInteger(1, md.digest(input.getBytes()));
return String.Format("%032X", md5Data);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}