2017-05-24 52 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的对象 –

相关问题