Comment convertir le hachage de mot de passe de MD5 en SHA?
J'ai eu une vieille application qui a d'utilisateur mots de passe stockés dans la base de données avec un hachage MD5. Je voudrais la remplacer par quelque chose dans le SHA-2 de la famille.
J'ai pensé à deux façons de le faire, mais ils semblent plutôt maladroit.
1) Ajouter un booléen "drapeau" sur le terrain. La première fois que l'utilisateur s'authentifie après cela, remplacer le mot de passe MD5 hash avec le SHA hachage de mot de passe et cochez la case. Je peux ensuite, vérifiez le drapeau pour voir si le hachage de mot de passe a été converti.
2) Ajouter un deuxième champ de mot de passe pour stocker le SHA de hachage. La première fois que l'utilisateur s'authentifie après cela, hacher le mot de passe avec SHA et de le stocker dans le nouveau champ (probablement de supprimer leurs hachage MD5 en même temps). Ensuite, je peux vérifier si le SHA champ a une valeur; essentiellement, cela devient mon drapeau.
Dans les deux cas, l'authentification MD5 devrait rester en place pendant un certain temps pour tous les utilisateurs qui se connectent rarement. Et tous les utilisateurs qui ne sont plus actifs ne seront jamais passé à SHA.
Est-il une meilleure façon de le faire?
source d'informationauteur Bruce Alderman
Vous devez vous connecter pour publier un commentaire.
Essentiellement le même, mais peut-être plus élégante que l'ajout de champs supplémentaires: Dans l'authentification par défaut framwork dans Djangole hachage de mots de passe sont stockés sous forme de chaînes construites comme ceci:
Hashtype est sha1 ou md5, le sel est une chaîne de caractères utilisée pour le sel brut de mot de passe et enfin vient le hachage de lui-même. Exemple de valeur:
Vous pouvez convertir tous vos MD5 Chaînes de SHA1 par ressasser dans votre base de données si vous créez vos futurs des mots de passe en première MD5ing. Vérifier les mots de passe nécessite MD5ing leur premier aussi, mais je ne pense pas que c'est un grand succès.
code php (login):
prev:
$login = (md5($password) == $storedMd5PasswordHash);
après:
$login = (sha1(md5($password)) == $storedSha1PasswordHash);
Fonctionne aussi avec le salage, a eu l'idée initiale de ici.
Je pense que vous avez déjà trouvé la meilleure des possibilités. J'aime le #1 de plus que le #2, car il n'y a aucune utilité pour le md5, une fois le sha est réglé.
Il n'y a aucun moyen d'inverser le MD5, alors vous devez attendre pour l'utilisateur de s'authentifier à nouveau pour créer une nouvelle table de hachage.
Pas de - en gros, vous devrez garder le MD5 en place jusqu'à ce que tous les utilisateurs que vous vous souciez ont été convertis. C'est juste la nature de hachage - vous n'avez pas assez d'information pour effectuer la conversion.
Une autre option en accord avec les autres, serait de rendre le champ de mot de passe auto-décrit, par exemple,
Vous pouvez facilement détecter l'algorithme à utiliser pour la comparaison, et éviter d'avoir deux champs. Encore une fois, vous auriez remplacer le MD5 avec SHA que vous êtes allé le long.
Vous voulez le faire une première mise à jour pour rendre tous les mots de passe actuels se déclarer en tant que MD5.
Votre deuxième suggestion sonne le mieux pour moi. De cette façon fréquente les utilisateurs auront un accès plus sûr de l'expérience dans l'avenir.
La première efficacement "quirks mode"de votre base de code et permet seulement de garantir que les nouveaux utilisateurs ont la meilleure SHA de l'expérience.
Si le MD5 ne sont pas salés, vous pouvez toujours utiliser un site de décryptage de l'/rainbow tables telles que: http://passcracking.com/index.php obtenir les mots de passe. Probablement plus facile d'utiliser le ré-encoder la méthode bien que.
Oui, vous devez connaître le mot de passe réel en premier avant de le convertir en sha-1..
Si vous souhaitez trouver le mot de passe md5 chaîne cryptée, vous pouvez essayer md5pass.com