2010-10-25 10 views
3

J'ai ce formulaire de demande de changement de mot de passe.Dans lequel l'utilisateur entrer leurs anciens mots de passe.Python md5 valeur de mot de passe

cet ancien mot de passe est le format md5.

Comment comparer la valeur md5 de db au ancienmotdepasse entré par l'utilisateur

import md5 

oldpasswd_byuser=str("tom") 
oldpasswd_db="sha1$c60da$1835a9c3ccb1cc436ccaa577679b5d0321234c6f" 
opw=  md5.new(oldpasswd_byuser) 
#opw=  md5.new(oldpasswd_byuser).hexdigest() 
if(opw ==  oldpasswd_db): 
    print "same password" 
else: 
    print "Invalid password" 

Répondre

3

le hachage que vous mettez dans il y a une hexdigest SHA1 salée comme django (et probablement beaucoup d'autres) stocke par défaut. Le code pour vérifier qu'il est dans contrib/auth/models.py. De là, vous pouvez voir que django fonctionne avec md5 par défaut. Tout ce que vous avez à faire est de mettre à jour les anciens hash à la forme suivante:

md5$<salt>$<hash> 

si votre hash ne sont pas salées laisser encore le sel vide (md5$$<hash>), mais mettre à jour le hachage SHA1 la prochaine fois que l'utilisateur effectue une connexion valide.

+0

pourrait u donner un exemple pertinent pour convertir le tom chaîne à md5 selon ur explaination – Rajeev

+0

salaison (http : //en.wikipedia.org/wiki/Salt_%28cryptography%29) mots de passe est fait pour empêcher les attaques de dictionnaire contre votre base de données. J'envelopper la vue de connexion comme décrit dans une question sur les signaux de connexion (http://stackoverflow.com/questions/1990502/django-signal-when-user-logs-in) et mettre à jour le hachage dans la vue enveloppée. Vous ne devez donc pas hacher vous-même la chaîne ''torn '', mais vous appelez' user.set_password ('torn') 'depuis le gestionnaire de vue de connexion si' user.is_authenticated() et user.password.startswith ('md5 $ $ ') '. – tback

+1

De nos jours, Django met automatiquement à jour les anciens mots de passe. –

2

Je ne pense pas que oldpasswd_db est un MD5. Il ressemble plus à une combinaison de méthode de hachage (SHA1 dans ce cas), un sel et le hachage de mot de passe lui-même.

Essayez de concaténer la valeur de sel avec le mot de passe:

import hashlib 
hashlib.sha1('c60datom').hexdigest() 
0

pour comparer la valeur de votre mot de passe actuel du mot de passe stocké dans la base de données que vous pouvez faire:

import md5 

input_password = request.POST['password'] 
md5_hashed_input_password = md5.new(input_password).hexdigest() 
#comapre the value to that stored in db 
if md5_hashed_input_password == db_password: #password in db should be stored in md5 hash format 
    print 'password match' 
else: 
    print 'password mismatch' 
Questions connexes