Всем привет!
Может у кого будут идеи? До последнего откладывал писать сюда, сопротивлялся тому, что байты нужно в hex строку переводить, в итоге сдался, перевел таки массив байт строку, получил результат,
По длине строка аналогична. А по значению совершенно другая. Пробовал 2 варианта, оба в коде есть, оба вариант дают идентичный результат, но отличающийся от требуемого.
package com.javarush.task.task32.task3211;
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.security.MessageDigest;
import java.util.Arrays;
/*
Целостность информации
*/
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 messageDigest = MessageDigest.getInstance("MD5");
byte[] digest;
messageDigest.update(byteArrayOutputStream.toString().getBytes());
digest = messageDigest.digest();
StringBuilder sb = new StringBuilder();
for (byte b: digest) {
//String s = Integer.toHexString(0xff & b);
//s = (s.length() == 1) ? "0" + s : s;
//sb.append(s);
sb.append(String.format("%02x",b ));
}
System.out.println(sb.toString());
System.out.println(md5);
return sb.toString().equals(md5);
}
}