2012-03-09 4 views
3

Я производит значение хэша пароля с salt.My кодом:хэширования пароля с помощью соли

`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);` 

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

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

ответ

4

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

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

+0

Спасибо, Это сработало, я получаю разные значения, если я повторяю цикл. – user10101

+0

Но если мне нужно сравнить значения хэша позже, мне нужно сравнить оба значения хэша, итерации цикла. Правильно? – user10101

+0

@ user1258724: См. Http://stackoverflow.com/questions/630808/compare-two-arrays-of-primitives-in-java для получения ответов на это. –

4

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

+0

Но если мне нужно сравнить значения хэша позже, мне нужно сравнить оба значения хэша, итерации цикла. Правильно ли это ??? – user10101

0

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

digest.toString(); 

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