我正在做一個作業:在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