2015-05-22 63 views
0

我正在做一个作业:在dict中,register()函数存储username-md5(密码)对而不是用户名 - 密码对,然后login()函数检查是否有一对用户名密码正确与否。但是,如果我向md5哈希添加'salt',那么login()会有问题:当输入相同时,md5具有不同的返回值。python md5函数具有不同的输出和相同的输入

import hashlib 
salt = '1ha3' 
def register (**kw): 
    md5DB = {} 
    md5 = hashlib.md5() 
    for key,value in kw.items(): 
     origin_str = key + value + salt 
     md5.update(origin_str.encode('utf-8')) 
     md5DB.update({key : md5.hexdigest()}) 
    return md5DB 

def login (user, password,**kw): 
    input_str = user + password+ salt 
    md5 = hashlib.md5() 
    md5.update(input_str.encode('utf-8')) 
    md5_result = md5.hexdigest() 
    if md5_result == kw[user]: 
     print ('Correct') 
    else: 
     print ('Wrong') 

database = {'Mike':'mike2001','Bob':'abcd2010','Alice':'2015alice'} 
mydb = register(**database) 
print (mydb) 
login ('Bob','abcd2010',**mydb) 

我的登录功能应该打印出“正确”,但结果是“错误”的MD5哈希结果是从相应的MYDB项目不同。有人可以帮我弄这个吗?提前致谢。

+2

首先,通过构建一个新的MD5实例每次迭代解决这个问题,你应该**从不**使用'md5'作为密码。 – JeromeJ

+1

不要为此使用md5 ..!使用'passlib' – wim

+0

对于当前的实现,你并不需要关键字参数 - register()只需要一个字典。 – eddiewould

回答

4

忽略是否使用MD5或不是问题,你可以在regsiter()

def register (**kw): md5DB = {} for key,value in kw.items(): md5 = hashlib.md5()
origin_str = key + value + salt md5.update(origin_str.encode('utf-8')) md5DB.update({key : md5.hexdigest()}) return md5DB

+1

+1当我第一次说出来的时候,我正打算进入Enter。同样,'md5DB [key] = md5.hexdigest()'和'md5DB.update({key:md5.hexdigest()})一样''ans更好。 – JeromeJ

相关问题