我正在尝试编写一个登录模块,该模块在.csv文件中搜索输入的用户名。如果找到用户名,它将采用输入的密码,并将其通过一个函数进行验证(密码保存并保存到.csv文件之前先经过加密和哈希处理)。
我运行了以下代码,以测试列表中的用户名和正确的密码,列表中未包含的用户名,列表中的用户名和错误的密码的预期结果。
with open('userDB.csv', 'rt') as f:
reader = csv.reader(f, delimiter=',')
for row in reader:
for field in row:
if user == row[0]:
psChk = row[1]
if verify_password(psChk, password):
print('In')
else:
print('Out!!')
else:
print('Out!!')
sys.exit()
对于使用列表中的用户和正确的密码进行的测试,我会得到两次“输入”语句,而当我使用列表中的用户进行测试并使用了错误的密码时,则会两次显示“出局”。虽然这是理想的结果,但我只想了解这里发生的情况。
当我测试用户名不在列表中时,“输出”仅打印一次。
def verify_password(stored_password,provided_password):
"""Verify a stored password against one provided by user"""
salt = stored_password[:64]
stored_password = stored_password[64:]
pwdhash = hashlib.pbkdf2_hmac('sha512',provided_password.encode('utf-8'),salt.encode('ascii'),100000)
pwdhash = binascii.hexlify(pwdhash).decode('ascii')
return pwdhash == stored_password
错误是这一行 for field in row:
您正在检查每一行中每个字段的用户名和密码。由于每行中都有两个字段(“用户名”和“密码”),因此它执行两次。
解决方法是:
with open('userDB.csv', 'rt') as f:
reader = csv.reader(f, delimiter=',')
for row in reader:
if user == row[0]:
psChk = row[1]
if verify_password(psChk, password):
print('In')
else:
print('Out!!')
else:
print('Out!!')
sys.exit()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句