Как обычно, разница составляет , а не в реализации дайджеста (они хорошо документированы и правильно реализованы во всех основных библиотеках). Разница в том, как вы представляете результирующие данные.
md.digest()
возвращает byte[]
с двоичными данными, созданными дайджестом.
new String(md.digest())
пытается интерпретировать эти байты как текст в кодировке платформы по умолчанию, которая почти наверняка не та, которую вы хотите.
Вы , вероятно, хотите, чтобы дайджест был представлен в кодировке hex или Base64.
Попробуйте это (обязательно импортируйте javax.xml.bind.DatatypeConverter
):
String result = DatatypeConverter.printHexBinary(md.digest());
В качестве альтернативы, если вам нужна Base64, используйте printBase65Binary()
.