2015-05-22 64 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

相關問題