Конкретно это не понятно
for(byte e : mdbytes) {
sb.append(String.format("%02x", e & 0xff));
System.out.println(sb);
}
Зачем переводить в шестнадцатиричную форму, если метод digest() возвращает в байтах хеш? Почему, допустим, не сравнить в тех же самых байтах тот ли объект захешировался или нет. Все прочел про MessageDigest, везде после хеширования переводят в 16-ное представление, но не объясняется зачем
public class Solution {
public static void main(String... args) throws Exception {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(new String("test string"));
oos.flush();
System.out.println(compareMD5(bos, "5a47d12a2e3f9fecf2d9ba1fd98152eb")); //true
}
public static boolean compareMD5(ByteArrayOutputStream byteArrayOutputStream, String md5) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] b = byteArrayOutputStream.toByteArray();
md.update(b);
byte[] mdbytes = md.digest();
StringBuilder sb = new StringBuilder();
for(byte e : mdbytes) {
sb.append(String.format("%02x", e & 0xff));
System.out.println(sb);
}
String digest = sb.toString();
if (md5.equals(digest))
return true;
return false;
}
}