web-dev-qa-db-fra.com

Comment décrypter en utilisant hashlib en python?

Je sais crypter:

encrypted = hashlib.sha256('1234').hexdigest()

mais je ne sais pas comment déchiffrer cela ??

decrypted = decrypt(encrypted)
12
Kamilski81

Le but d'un hachage comme sha256 est qu'il est censé être une fonction à sens unique (bien que l'existence de véritables fonctions à sens unique soit toujours une question ouverte, voir http://en.wikipedia.org/wiki/ Fonction à sens unique ).

Remarque http://en.wikipedia.org/wiki/Cryptographic_hash_function :

The ideal cryptographic hash function has four main properties:

    1. it is easy to compute the hash value for any given message
    2. it is infeasible to generate a message that has a given hash
    3. it is infeasible to modify a message without changing the hash
    4. it is infeasible to find two different messages with the same hash.

Si vous pouviez l'inverser, vous enfreindriez la règle 2. Ces règles permettent à une autre personne de dire qu'elle a des informations (comme un mot de passe), sans révéler les informations. Par exemple, voir wikipedia: http://en.wikipedia.org/wiki/Cryptographic_hash_function#Illustration

Si vous avez besoin d'invertibilité voir n moyen simple d'encoder une chaîne selon un mot de passe? , vous pouvez utiliser quelque chose de faible comme Vignere, mais il y a aussi un exemple utilisant PyCrypto:

from Crypto.Cipher import AES
import base64

cipher = AES.new(secret_key,AES.MODE_ECB) # never use ECB in strong systems obviously
encoded = base64.b64encode(cipher.encrypt(msg_text))
# ...
decoded = cipher.decrypt(baes64.b64decode(msg_text))

Si vous voulez une fonction de hachage réversible, voir Fonction de hachage réversible?

20
Anil Vaitla

La réponse courte est que vous ne pouvez pas "décrypter" un hachage; c'est une fonction à sens unique. Il existe une différence majeure entre le chiffrement et le hachage.

Hachage

Voir http://en.wikipedia.org/wiki/Cryptographic_hash_function

Remarque: Il est possible de "BRISER" certains algorithmes de hachage, mais ce n'est pas du décryptage. Vous trouverez plus d'informations dans les liens ainsi que d'autres algorithmes qui sont également pris en charge par python

Cryptage

et http://en.wikipedia.org/wiki/Encryption

Exemple

Un exemple utile de hachage est le stockage de mots de passe dans une base de données tandis qu'un exemple utile de cryptage envoie vos coordonnées bancaires à une boutique en ligne pour acheter quelque chose.

5
chrisw

Les hachages sont calculés à l'aide de fonctions unidirectionnelles, c'est-à-dire qu'elles donneront la même sortie pour une entrée particulière, mais comme il ne s'agit que d'une fonction unidirectionnelle, quoi que vous fassiez, vous ne pouvez pas la déchiffrer. On peut essayer de le déchiffrer par force brute, c'est-à-dire calculer des hachages de mots à partir du dictionnaire et le comparer avec le hachage que vous voulez déchiffrer. Pour gagner du temps sur le calcul des hachages des mots du dictionnaire, il existe des tables Rainbow disponibles en ligne qui contiennent des hachages avec les mots.

lire: http://en.wikipedia.org/wiki/Rainbow_table

Vous pouvez également utiliser les services en ligne pour le décryptage en force brute d'un hachage. il y en a beaucoup disponibles et fonctionne bien si le mot que vous souhaitez déchiffrer appartient à un dictionnaire.

1
scottydelta

Pas très exact Analogie: Le cryptage est comme quelqu'un qui porte un déguisement ... prendre un Hash, c'est comme prendre ses empreintes digitales!

Vous pouvez récupérer la personne "d'origine" en retirant/inversant le déguisement, mais vous ne pouvez pas le faire à partir d'un ensemble d'empreintes digitales!

1
MikeW

C'est une question valable, mais peut-être pas posée correctement cependant.

OP, je pense que ce que vous essayez de faire est de comparer une valeur hachée avec une valeur non hachée?

hashed = hashlib.sha256('1234').hexdigest()
hashedstring = '1234' + ',' + hashed

maintenant pour vérifier que haché == valeur d'origine. Analysez donc le morceau avant et après la virgule. Hash 1234 et comparez-le à la valeur hachée.

def check_secure_val(h):
    commapos = h.find(",")
    val = h[0:commapos]
    hashval = h[commapos+1:-1]
    rehashval = hash_str(val)
    if rehashval == hashval:
        return val

où l'entrée h est une chaîne de format "val, (HASHEDSTRING)"

et hash_str est une fonction qui hache.

1
Thomas Robert Horn