2010-05-03 13 views
3

Possible en double:
Is it possible to decrypt md5 hashes?est là une fonction de décryptage md5 en python?

i utilisé md5.new(); md5.update("aaa"), md5.digest()

pour former un hachage md5 des données "aaa". Comment récupérer les données en utilisant python?

+10

Nope, ni en python ou tout autre langage de programmation – OscarRyz

+6

md5() n'est pas une fonction "de cryptage". Il n'y a pas d'inverse, s'il y avait alors il ne pouvait pas être utilisé pour les mots de passe. – rook

+5

essayez 'import magic' –

Répondre

18

Vous ne pouvez pas décoder un hachage md5, car le hachage est un processus qui est mieux considéré comme one-way encoding (c'est-à-dire que ce qui est haché ne peut pas être haché, on peut seulement déterminer ce qui a été haché, soit en examinant une liste des hachages connus, ou en hachant un ensemble d'entrées et en faisant correspondre les hachages résultants avec le hachage que vous essayez de "décoder").

Citant Wikipedia, les principales caractéristiques d'un tel algorithme de hachage sont:

il est impossible de trouver un message qui a un hachage donné,

il est infaisable de modifier un message sans changer son hachage,

il est impossible à trouver deux messages différents avec le même hachage .

Les utilisations les plus courantes de ces algorithmes sont aujourd'hui:

  • mots de passe Enregistrement
  • vérifier le contenu des fichiers.

Si vous voulez les deux sens crypter les données, vous devez regarder d'autres bibliothèques cryptographiques pour Python (Comme d'habitude, Stackoverflow a un recommendation).

+0

Si ce n'est pas censé être « décodé », puis « encoding » est un choix assez pauvre de mot. Pourquoi pas le traditionnel "hachage à sens unique"? – tzot

+0

@ ΤΖΩΤΖΙΟΥ: Parce que l'encodage/cryptage unidirectionnel est un terme inapproprié, utilisé uniquement par ceux qui ne sont pas sûr de ce dont ils parlent –

+0

Les hachages de mots de passe sont fissurés tous les jours. – rook

13

Vous ne pouvez pas. C'est le point - un hachage est à sens unique, ce n'est pas la même chose qu'un cryptage.

+2

Un hachage n'est pas nécessairement unidirectionnel, mais MD5 est sûr. ;) Un hachage est unidirectionnel s'il y a des collisions telles que deux entrées distinctes ont le même résultat. –

+1

@Nathan: Cela n'a aucun sens. –

+0

de préciser * pourquoi * cela n'a pas de sens? Si vous le regardez d'un point de vue mathématique, un hachage est simplement une fonction 'h (x) = y' où' h' est la fonction de hachage, 'x' est l'entrée et' y' est la sortie. Un hachage est seulement unidirectionnel s'il y en a un tel que 'x' et 'z' que' h (x) = y' * et * 'h (z) = y' étant donné que' x! = Z'. Supposons que 'h (x)' soit simplement une identification (disons 'x' est un nombre entier ou un type char), ou même simplement une simple rotation. Ce serait entièrement réversible et donc pas à sens unique. –

0

En général, les réponses de BlueRaja et Sean sont correctes. MD5 (et d'autres fonctions de hachage) sont à sens unique, vous ne pouvez pas inverser le processus. Cependant, si vous avez une petite taille de données, vous pouvez essayer de rechercher une collision de hachage (une autre ou la même donnée) ayant le même hachage.

+0

la recherche de collision prend beaucoup de temps je pense que vous voulez dire une attaque de dictionnaire. – rook

+0

Oui, il serait beaucoup plus rapide d'utiliser une attaque de dictionnaire pour trouver les bits de données en collision (à la fin, cependant, il s'agit d'une collision dans le hachage). – ssube

2

Je ne connais pas Python - mais la fonction de hachage est irréversible. Tout d'abord, notez que les fonctions de hachage fournissent une sortie de longueur constante - ce qui signifie que les informations seront jetées (vous pouvez hacher un fichier de 3 Mo et obtenir seulement un résultat inférieur à 1 Ko). En outre, les fonctions de hachage sont faites pour le fait qu'elles ne sont pas réversibles, si vous avez besoin de cryptage, n'utilisez pas le hachage mais le cryptage - une application majeure de hachage est quand les informations de base de données ont fui. n'ont pas été compromis (il y a d'autres exemples, mais c'est le plus évident)

+0

Ceci est seulement pour les fonctions de hachage cryptographiques. Une fonction de hachage purement mathématique n'a pas de hash de taille d'héritage (n) = n% 101, même s'il y aura une taille de type associée à la plupart des implémentations. C'est une méthode courante pour mapper des valeurs aux indices de tableau, même si elle est irréversible (sauf si vous connaissez n <101), il est assez facile de prédire les entrées possibles. – mikerobi

3

Si vous voulez casser un hachage, comme un hachage de mot de passe. Ensuite, vous avez besoin d'une très grande table de recherche.John the Ripper est couramment utilisé pour casser les mots de passe en utilisant un dictionnaire, c'est une très bonne méthode surtout si c'est un hachage de mot de passe salé.

Une autre approch utilise un Rainbow Table, mais ceux-ci prennent beaucoup de temps pour générer. Il y a free rainbow tables accessible online.

Here est un script python pour effectuer une attaque par force brute md5().

0

Pour ajouter au point de tout le monde, MD5 est un hachage à sens unique. L'utilisation courante consiste à hacher deux valeurs d'entrée et si les valeurs hachées concordent, alors l'entrée doit être identique à. Passer d'une valeur hachée MD5 à l'entrée hash est absurde. Ce que vous êtes probablement après est un symmetric encryption algorithm - voir two-way keyed encryption/hash algorithm pour une bonne discussion sur le sujet.

+0

"md5 est un hachage à sens unique" Cette phrase n'est pas incorrecte, mais elle implique à tort qu'il existe des hachages bidirectionnels ... – Jasper

+0

@Jasper - MD5 est une fonction de hachage unidirectionnelle qui en fait un candidat pour un Fonction de hachage _cryptographic_ et vous avez raison de dire que les fonctions de hachage _cryptographic_ bidirectionnelles sont complètement absurdes. J'imagine que j'aurais dû dire que "MD5 est une fonction de hachage cryptographique donc elle est intrinsèquement irréversible". –

+1

@Jasper: Je vois votre appel pendantry et vous élève: Des hachages parfaits. Toutes les entrées légales sont mappées à une sortie distincte, et peuvent donc être inversées, de même qu'une fonction de hachage bidirectionnelle. – Jason

0

Hashes map un tas de données à un fini (quoique grand) ensemble de valeurs numériques/chaînes. Il s'agit d'un mappage plusieurs-à-un, de sorte que le décodage d'un hachage est non seulement "difficile" au sens cryptographique, mais aussi conceptuellement impossible car même si vous le pouviez, vous obtiendriez un ensemble infini d'entrées possibles cordes.

1

est ici une fonction pour déchiffrer un hachage MD5. Ce n'est pas très rapide.

import hashlib 
import sys 

def decryptMD5(testHash): 
     s = [] 
     while True: 
       m = hashlib.md5() 
       for c in s: 
         m.update(chr(c)) 
       hash = m.hexdigest() 
       if hash == testHash: 
         return ''.join([chr(c) for c in s]) 
       wrapped = True 
       for i in range(0, len(s)): 
         s[i] = (s[i] + 1) % 256 
         if s[i] != 0: 
           wrapped = False 
           break 
       if wrapped: 
         s.append(0) 

print decryptMD5(sys.argv[1]) 

Utilisation:

$ python md5.py 47bce5c74f589f4867dbd57e9ca9f808 
aaa 
+0

mais cette chose ne trouve qu'une des nombreuses solutions possibles, non? – Kugel

+0

Eh bien, oui. Mais au moins ça court en temps fini ... – Thomas