Я хочу реализовать хеширование SHA512 с использованием соли. Я начал here, ведущий к этому mcve:Хеширование SHA512 дает неправильные результаты (?), Когда «соленый»
import java.security.MessageDigest;
import org.junit.Test;
public class Sha512Mcve {
private final String ENCODING = "ISO-8859-1";
@Test
public void test() {
System.out.println(computeHashFor("whatever"));
}
private String computeHashFor(String toHash) {
String salt = "salt";
MessageDigest md;
try {
md = MessageDigest.getInstance("SHA-512");
// md.update(salt.getBytes(ENCODING));
byte[] bytes = md.digest(toHash.getBytes(ENCODING));
return toUnixRepresentation(salt, bytes);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private String toUnixRepresentation(String salt, byte[] bytes) {
StringBuilder sb = new StringBuilder();
sb.append("$6$");
sb.append(salt);
sb.append("$");
for (int i = 0; i < bytes.length; i++) {
int c = bytes[i] & 0xFF;
if (c < 16) sb.append("0");
sb.append(Integer.toHexString(c));
}
return sb.toString();
}
}
вещи: когда я выхожу из линии md.update()
закомментирована, этот код дает мне точные же результатов как некоторые онлайн хэш-генераторы (как этот one) ,
Например, хеширования слово «все» дает значение хеш-функции ae3d .... 63а.
Но когда я запускаю свой код с этой солью; Я получаю разные результаты (опять же по сравнению с этим онлайн-инструментом, который также позволяет установить солонку).
Результаты моей реализации 413 ... 623; онлайн-инструмент говорит F25 ... 686.
Любое объяснение, каким образом «соления» приводит к «реализации конкретных» результатов?
Есть ли что-то, что я должен делать по-другому в своем коде?
Если вы ищете хэш-код пароля, то метод хэширования не просто использует один раунд хэширования. Пожалуйста, обратитесь к https://en.wikipedia.org/wiki/Crypt_%28C%29 Также, если вы хотите, у меня есть работающая реализация Java для этого hasing для sha256 и sha512 (написанная с нуля) –