Je veux mettre en œuvre le hachage SHA512 en utilisant un sel. J'ai commencé here, menant à cette mcve:Le hachage SHA512 donne des résultats incorrects (?) Lorsqu'il est "salé"
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();
}
}
chose est: quand je quitte la ligne md.update()
commentaire, ce code me donne les exactement les mêmes résultats que certains générateurs de hachage en ligne (comme celui-ci one) . Par exemple, hacher le mot "what" donne une valeur hash ae3d .... 63a. Mais quand j'exécute mon code avec cette opération au sel, je l'utilise. Je reçois différents résultats (encore une fois comparé à cet outil en ligne, qui permet de définir une chaîne de sel, aussi). Ma mise en œuvre entraîne 413 ... 623; l'outil en ligne dit F25 ... 686.
Toute explication de quelle manière le "salage" conduit à des résultats "spécifiques à la mise en œuvre"?
Y a-t-il quelque chose que je devrais faire différemment dans mon code?
Si vous recherchez le hachage de mot de passe, la méthode de hachage n'utilise pas simplement un hachage. S'il vous plaît se référer à https://en.wikipedia.org/wiki/Crypt_%28C%29 Aussi si vous le souhaitez, j'ai une implémentation Java qui fonctionne pour sha256 et sha512 (écrit à partir de rien) –