1
votes

Du hachage SHA au mot de passe

J'ai donc écrit ce code pour convertir en hachage mon mot de passe et je veux maintenant prendre le hachage et le reconvertir en chaîne. comment y parvenir?

package security;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class HashPassword {

    public static String hashPassword(String password) throws NoSuchAlgorithmException 
    {
        MessageDigest sha= MessageDigest.getInstance("SHA");
        sha.update(password.getBytes());
        byte [] b=sha.digest();
        StringBuffer sb= new StringBuffer();
        for(byte b1:b)
        {
            sb.append(Integer.toHexString(b1 & 0xff).toString());
        }

        return sb.toString();
    }
    public static void main(String[] args) 
    {
       String password="1234";
       System.out.println(password);
       try
       {
       System.out.println(hashPassword(password));
       }catch(NoSuchAlgorithmException e)
       {}
    }

}


1 commentaires

Vous ne le faites pas. C'est le but du hachage. Pourquoi pensez-vous avoir besoin de la chaîne d'origine, qu'essayez-vous d'accomplir?


3 Réponses :


1
votes

Vous pouvez essayer de le casser avec Rainbow table


1 commentaires

J'aime la façon dont cette réponse pointe. Pourriez-vous en dire plus?



1
votes

Le but du hachage des mots de passe est de réaliser une chose: rendre aussi difficile que possible l'acquisition du mot de passe d'origine à partir de sa version hachée.

De toute façon, vous n'avez jamais besoin de ce mot de passe d'origine. Il vous suffit de conserver le mot de passe haché (et salé!) Et chaque fois que vous avez besoin d'authentifier à nouveau l'utilisateur, vous demandez son mot de passe, hachez-le et vérifiez si cela correspond au mot de passe haché persistant que vous avez stocké précédemment.

Donc: bien qu'il soit parfois possible d'acquérir le mot de passe à partir de son hachage, c'est simplement quelque chose dont vous ne vous souciez pas (sauf si vous êtes un cryptographe qui souhaite évaluer la qualité de l'implémentation du hachage).


0 commentaires

1
votes

Comme d'autres personnes l'ont souligné, un hachage n'est pas destiné à être "converti" à sa valeur d'origine . Pour cette raison exacte, les hachages sont utilisés dans les bases de données pour stocker les mots de passe. Avec un hachage, qui est stocké dans une base de données, même si j'ai accès à la base de données, je ne peux pas comprendre le mot de passe qui y est stocké.

Maintenant, en fonction de votre utilisation du hachage, vous pouvez essayer plusieurs choses:

1.
Vous voulez simplement rendre un mot de passe illisible et lisible après un certain temps
Dans ce cas, vous pouvez utiliser un algorithme de chiffrement et de déchiffrement plutôt qu'une méthode de hachage. De cette façon, vous pouvez récupérer la valeur d'origine si vous le souhaitez.

À titre d'exemple simple: https: //www.thejavaprogrammer. com / caesar-cipher-java-encryption-decryption /
N'UTILISEZ JAMAIS LE CHIFFREMENT POUR ENREGISTRER DES MOTS DE PASSE.

2.
Vous souhaitez mettre en œuvre un service / système de connexion / enregistrement dans lequel vous stockez le mot de passe sous forme de hachage.
Si c'est ce que vous voulez, je vous suggère le sympathique bcrypt: https://en.wikipedia.org/wiki/Bcrypt
Aujourd'hui, bcrypt est en quelque sorte un standard pour le hachage des mots de passe et autres informations. L'implémentation Java offre également un excellent moyen de vérifier si un mot de passe entré correspond au mot de passe stocké. Vous n'avez donc pas besoin de déchiffrer le hachage sur une période de plusieurs jours juste pour vérifier le mot de passe.

L'implémentation Java de bcrypt peut être trouvée ici: http://www.mindrot.org/projects / jBCrypt /



0 commentaires