我正在做一个作业:在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项目不同。有人可以帮我弄这个吗?提前致谢。
首先,通过构建一个新的MD5实例每次迭代解决这个问题,你应该**从不**使用'md5'作为密码。 – JeromeJ
不要为此使用md5 ..!使用'passlib' – wim
对于当前的实现,你并不需要关键字参数 - register()只需要一个字典。 – eddiewould