Хеширование пароля с помощью соли - PullRequest
3 голосов
/ 09 марта 2012

Я создаю хешированное значение пароля с солью. Мой код:

  `String psw="hello";  
   String tobehashed="";
   tobehashed=salt+psw;
   MessageDigest md = MessageDigest.getInstance("SHA-256");
   byte[] digest = md.digest(tobehashed.getBytes());
   System.out.println("Digest:"+digest);` 

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

На самом деле цель соли - получить разные значения хеша. Это мой вывод; Random nubr:-2098016229(this keeps changing) Digest:[B@ca0b6(this remains same) Что такое решение ??

Ответы [ 3 ]

4 голосов
/ 09 марта 2012

Вы распечатываете результат digest.toString(), который в случае байтового массива не преобразует байты в значимый вывод. Он просто печатает [B (который является кодом для байтового массива), @, а затем шестнадцатеричный адрес. Этот вывод вы будете часто видеть по мере приобретения опыта работы с Java.

Вам нужно будет использовать цикл для перебора байтов в дайджесте и распечатывать их по отдельности.

4 голосов
/ 09 марта 2012

B @ ca0b6 - это не содержимое байтового массива, это представление toString (). Переберите байты массива и напечатайте их по отдельности.

0 голосов
/ 09 марта 2012

Если вы печатаете какую-либо ссылочную переменную, то System.out.println() функция запускает toString() функцию из класса объектов. вывод toString() показывает через printf() ..
По умолчанию toString() возвращает HaxCode вашего объекта ref.
Если вы хотите изменить его, вы должны переопределить toString() в соответствующем class.

digest.toString();

просто печатает шестнадцатеричный адрес. Поэтому вы должны использовать Iterate для байтов массива и печатать их по отдельности ...

...