Это небольшая вариация ответов Андраника и Дена Делимарского выше, но она немного более краткая и не требует побитовой логики Вместо этого он использует встроенный метод String.format
для преобразования байтов в шестнадцатеричные строки из двух символов (не обнуляет 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
.
Edit:
Используя 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;
}
}