Метод MessageDigest digest () - PullRequest
       9

Метод MessageDigest digest ()

3 голосов
/ 26 сентября 2011

Разве метод digest () в MessageDigest не должен всегда давать одно и то же значение хеш-функции для одного и того же ввода?

Я пытался это сделать, и каждый раз получал разные наборы значений хеш-значений для одного и того же ввода

md5 = MessageDigest.getInstance("MD5");
System.out.println(md5.digest("stringtodigest".getBytes()));
System.out.println(md5.digest("stringtodigest".getBytes())); 
System.out.println(md5.digest("stringtodigest".getBytes()));

Обновление: изменен параметр метода digest ()

1 Ответ

13 голосов
/ 26 сентября 2011

Вы видите результаты вызова byte[].toString() - который не показывает фактический хэш данных. В основном вы получаете строку, которая показывает, что вы вызвали toString в байтовом массиве (это часть [B), а затем хэш, возвращаемый Object.hashCode() (это шестнадцатеричное значение после @). Этот хеш-код не учитывает данные в массиве.

Попробуйте

System.out.println(Arrays.toString(md5.digest(byteArrayToDigest)));

чтобы увидеть фактические данные .

РЕДАКТИРОВАТЬ: Быстрое примечание о создании дайджеста MD5 из строки данных - вы всегда должны использовать одну и ту же кодировку, явно, при хешировании. Например:

byte[] hash = md5.digest(text.getBytes("UTF-8"));
...