이것은 위의 Andranik 및 Den Delimarsky 답변의 약간 변형이지만 조금 더 간결하고 비트 논리가 필요하지 않습니다. 대신 내장 String.format
메서드를 사용하여 바이트를 두 문자 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
.
편집 : wzbozon의 답변과 같이 BigInteger를 사용하면 답변을 더욱 간결하게 만들 수 있습니다.
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;
}
}