12
votes

Sha2 Mot de passe hachage en Java

J'essaie de hasch quelques mots de passe avec SHA2.

Où puis-je obtenir un extrait de code Java pour faire cela? P>

J'ai vu ce post mais j'ai quelque chose à manquer: Stockage de mot de passe SHA2 avec Java P>

 Mac mac = Mac.getInstance("HmacSha256");
 SecretKeySpec secret = new SecretKeySpec(key.getBytes(), "HmacSha256");
 mac.init(secret);
 byte[] shaDigest = mac.doFinal(phrase.getBytes());
 String hash = "";
 for(byte b:shaDigest) {
     hash += String.format("%02x",b);
 }


1 commentaires

FYI: Vous pouvez lire des questions sur le hachage de mot de passe. Bien qu'il soit bon des mots de passe de hasch, il est non trivial de le faire correctement. Cette question a de bonnes réponses: Suggestions pour les mots de passe de la bibliothèque à hachage de Java < / a>


4 Réponses :


1
votes

phrase serait le mot de passe que vous essayez de protéger. Touche est le sel, une chaîne unique (et connue) ajoutée à votre mot de passe avant hachage, pour vaincre les tables arc-en-ciel. Ou il devrait être, au moins. Votre code est juste en train de le prendre à partir du mot de passe lui-même, qui est un peu inutile. Il devrait s'agir d'une longue chaîne aléatoire stockée avec le digest de mot de passe.


0 commentaires

10
votes

Vous pouvez envisager d'utiliser la mise en œuvre de Commons-Codec

String hash = org.apache.commons.codec.digest.DigestUtils.sha256Hex(password +"salt");


1 commentaires

Ce n'est pas en Java SE



25
votes

Tout d'abord, vous devez être clair ce que vous voulez faire. Vous dites que vous voulez avoir un mot de passe hachai, mais le code que vous utilisez est pour un Mac ( Code d'authentification de message a>), plus précisément, HMAC .

Les hachages et les MAC sont des choses différentes à des fins différentes ( Bien que le HMAC implique d'utiliser un hachage). Vous devez être sûr que vous utilisez le bon pour votre exigence. P>

La raison à laquelle on vous demande de fournir une clé est que des MAC ont besoin d'une clé. HASHES NE PAS: P>

public byte[] hash(String password) throws NoSuchAlgorithmException {
    MessageDigest sha256 = MessageDigest.getInstance("SHA-256");        
    byte[] passBytes = password.getBytes();
    byte[] passHash = sha256.digest(passBytes);
    return passHash;
}


0 commentaires

15
votes

J'ai modifié le code d'un petit Rossum, ajouté du sel et convertir le type de retour en chaîne, ajoutez Essayer / Catch, peut-être que cela aidera à une personne:

    public String hash(String password) {
    try {
        MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
        String salt = "some_random_salt";
        String passWithSalt = password + salt;
        byte[] passBytes = passWithSalt.getBytes();
        byte[] passHash = sha256.digest(passBytes);             
        StringBuilder sb = new StringBuilder();
        for(int i=0; i< passHash.length ;i++) {
            sb.append(Integer.toString((passHash[i] & 0xff) + 0x100, 16).substring(1));         
        }
        String generatedPassword = sb.toString();
        return generatedPassword;
    } catch (NoSuchAlgorithmException e) { e.printStackTrace(); }       
    return null;
}


0 commentaires