2017-05-24 63 views
0

我目前正在掌握Python中的散列特性,用算法編碼一個PIN碼。在用戶設置了PIN碼後,我將其設置爲變量'actualPIN'。我的代碼如下:使用散列來編碼PIN並將其保存到數據庫? PYTHON3

def returnCard(name, ID, rollingBalance, actualPIN): 
    PIN = hashlib.sha256() 
    PIN.update(b"actualPIN") 
    data = (rollingBalance, actualPIN, ID) 
    print(rollingBalance) 
    with sqlite3.connect("ATM.db") as db: 
     cursor = db.cursor() 
     sql = 'update Atm set Balance=?, PIN=? where CustomerID=?' 
     cursor.execute(sql, data) 
     db.commit() 
    print("Thank you for using Norther Frock") 
    print("Returning card...") 
    time.sleep(1) 
    print("Have a nice day") 
    entryID() 

一切正常,但用戶輸入的引腳保存在數據庫中。我想要保存到數據庫的是編碼密碼(顯然是?)。任何人都可以解釋我如何做到這一點?

回答

1

您正在爲數據庫寫入actualPIN變量。相反,你的意思是寫摘要:

data = (rollingBalance, PIN.digest(), ID) 
# or data = (rollingBalance, PIN.hexdigest(), ID) 

而且你可能想使用actualPIN變量,而不是"actualPIN"字符串在這裏:

PIN.update(repr(actualPIN).encode('utf-8')) 
+0

我已經試過了,但現在當我使用的PIN被用戶輸入到程序中時,它被視爲無效? –

+0

@ D.Smith好的,如果我正確理解你的話,你的代碼還有一個問題 - 查看更新後的答案。謝謝。 – alecxe

+0

剛剛嘗試過。將此作爲響應: TypeError:支持所需緩衝區API的對象 –

相關問題