web-dev-qa-db-fra.com

Comment décrypter une chaîne cryptée SHA-256?

J'ai une chaîne qui a été encodée à l'aide de la méthode suivante, existe-t-il un moyen de décoder cette chaîne à sa valeur d'origine? Merci.

public synchronized String encode(String password)
        throws NoSuchAlgorithmException, IOException {

    String encodedPassword = null;
    byte[] salt = base64ToByte(saltChars);

    MessageDigest digest = MessageDigest.getInstance("SHA-256");
    digest.reset();
    digest.update(salt);

    byte[] btPass = digest.digest(password.getBytes("UTF-8"));
    for (int i = 0; i < ITERATION_COUNT; i++) {
        digest.reset();
        btPass = digest.digest(btPass);
    }

    encodedPassword = byteToBase64(btPass);     
    return encodedPassword;
}

private byte[] base64ToByte(String str) throws IOException {

    BASE64Decoder decoder = new BASE64Decoder();
    byte[] returnbyteArray = decoder.decodeBuffer(str);

    return returnbyteArray;
}

private String byteToBase64(byte[] bt) {

    BASE64Encoder endecoder = new BASE64Encoder();
    String returnString = endecoder.encode(bt);

    return returnString;
}
46
chiappone

SHA-256 est un fonction de hachage cryptographique (unidirectionnelle) , il n'y a donc aucun moyen direct de le décoder. Le but d'une fonction de hachage cryptographique est que vous ne pouvez pas l'annuler.

Une chose que vous pouvez faire est un stratégie de force brute , où vous devinez ce qui a été haché, puis hachez-le avec la même fonction et voyez si cela correspond. À moins que les données hachées ne soient très faciles à deviner, cela pourrait prendre un temps long .

Vous trouverez peut-être la question " Différence entre le hachage d'un mot de passe et son chiffrement " est intéressante.

118
Brendan Long

Il convient de noter que Sha256 ne crypte pas les données/le contenu de votre chaîne, il génère plutôt un hachage de taille fixe, en utilisant votre chaîne d’entrée comme source.

Ceci étant le cas, je pourrais alimenter le contenu d’une encyclopédie, qui aurait facilement une taille de texte de 100 Mo, mais la chaîne résultante aurait toujours une taille de 256 bits.

Il est impossible pour vous d'inverser le hachage, pour extraire ces 100 Mo de données du hachage de taille fixe, le mieux que vous puissiez faire est d'essayer de deviner/calculer les données de départ, hachage, puis de voir si le hachage correspond au hachage vous essayez de casser.

Si vous pouviez inverser le hachage, vous auriez la meilleure forme de compression à ce jour.

31
Baaleos

Vous avez fait le bon choix en utilisant un sel appelé SSHA.

SHA et SHA-2 (ou SHA-256) ne sont plus considérés comme sécurisés! Salage a SHA le hachage est appelé Salé SHA ou SSHA.

Vous trouverez ci-dessous un exemple simple illustrant à quel point il est facile de décomposer SHA-1. La même chose peut être faite pour SHA-2 sans trop d'effort.

Entrez un mot de passe dans cette URL: http://www.xorbin.com/tools/sha1-hash-calculator Copiez-collez le hachage dans cette URL: http: //www.hashkiller .co.uk/sha1-decrypter.aspx

Voici une page qui décompose SHA-2. La façon dont fonctionne cette page est que quelqu'un doit avoir déjà haché votre mot de passe, sinon il ne le trouvera pas: md5hashing dot net/hashing/sha256

Voici une page qui prétend disposer de tableaux complets SHA-2 disponibles au téléchargement pour un "don" (je ne l’ai pas encore essayé): crackstation dot net/buy-crackstation-wordlist-password-cracking-dictionary.htm

Voici un bon article qui explique pourquoi vous devez utiliser SSHA sur SHA: crackstation dot net/hashing-security.htm

3
Bernie Lenz

SHA * est une fonction de hachage. Il crée une représentation (hachage) des données d'origine. Ce hachage n'est jamais destiné à être utilisé pour recréer les données d'origine. Donc, ce n'est pas un cryptage. La même fonction de hachage peut être utilisée à deux endroits différents sur les mêmes données d'origine pour voir si le même hachage est produit. Cette méthode est couramment utilisée pour la vérification du mot de passe.

3
paiego