2010-10-04 8 views
3

J'ai un modèle d'utilisateur sur mon application, et mon champ de mot de passe utilise sha1. Ce que je veux c'est, quand j'obtiens le sha1 de la DB, pour en faire une chaîne à nouveau. Comment je fais ça?Convertir SHA1 en chaîne

+0

duplication possible de [Décoder sha1 chaîne à la chaîne normale] (http://stackoverflow.com/questions/3492317/decode-sha1-string-to-normal-string) –

Répondre

10

Vous ne pouvez pas - SHA1 est un hachage unidirectionnel. Compte tenu de la sortie de SHA1 (X), n'est pas possible de récupérer X (au moins, non sans une recherche de force brute ou dictionary/rainbow table scan)

Une façon très simple de penser à ce sujet est d'imaginer que je vous donne un ensemble de nombres à trois chiffres à ajouter, et vous me dites les deux derniers chiffres de cette somme. Ce n'est pas possible à partir de ces deux chiffres pour moi de savoir exactement quels numéros vous avez commencé avec.

Voir aussi

pensée concernant MD5, ces questions peuvent également vous éclairer:

0

SHA est un algorithme de hachage. Vous pouvez comparer le hachage d'une entrée fournie par l'utilisateur avec le hachage stocké, mais vous ne pouvez pas facilement le traiter (reconstruire la chaîne d'origine à partir du hachage stocké). À moins que vous ne choisissiez de forcer ou d'utiliser des tables arc-en-ciel (toutes deux extrêmement lentes lorsqu'elles sont fournies avec une entrée suffisamment longue).

1

Vous ne pouvez pas - c'est le point de SHA1, mdb5, etc. La plupart d'entre eux sont à sens unique hash pour la sécurité. Si cela pouvait être inversé, toute personne ayant accès à votre base de données pourrait obtenir tous les mots de passe. Ce serait mauvais.

Au lieu de déambuler votre base de données, au lieu de hacher la tentative de mot de passe et de comparer cela à la valeur hachée dans la base de données.

+0

c'est exactement ce que je fais, j'essayais juste – onildo

+0

Vous pouvez vérifier si l'utilisateur a changé son mot de passe ou non en comparant les hachages, mais en termes de vérification si le mot de passe était plus long ou plus court, etc, ce qui n'est pas possible si vous utilisez SHA1. –

0

Si vous parlez de cela d'un point de vue pratique, abandonnez maintenant et considérez cela comme impossible. Trouver la chaîne originale est impossible (sauf par accident). La plupart du point d'un hachage cryptographiquement sécurisé est de s'assurer que vous ne pouvez pas trouver autre chaîne qui produit le même hachage soit.

Si vous êtes intéressé par la recherche d'algorithmes de hachage sécurisés: trouver une chaîne qui produira un hachage donné s'appelle une "pré-image". Si vous parvenez à le faire (avec une complexité de calcul raisonnable) pour SHA-1, vous deviendrez probablement assez célèbre parmi les chercheurs en cryptanalyse. Le meilleur "break" contre SHA-1 actuellement connu est un moyen de trouver deux chaînes d'entrée qui produisent le même hachage, mais 1) il est très coûteux en termes de calcul (pensez à un certain nombre de machines fonctionnant 24/7 pendant des mois à temps pour trouver une telle paire), et pas pour travailler pour une valeur de hachage arbitraire - il trouve un d'une classe spéciale de chaînes d'entrée pour laquelle une paire correspondante est (relativement) facile à trouver.

0

Vous ne pouvez pas faire cela avec SHA-1. Mais, compte tenu de ce que vous devez faire, vous pouvez essayer d'utiliser AES à la place. AES permet le cryptage et le décryptage.

+0

Il n'est pas vraiment nécessaire pour moi de décrypter le champ, je voulais juste vérifier si c'était correct, mais j'ai oublié si je viens de me connecter, je saurais si le mot de passe était correct. – onildo