我正在尝试编写一个登录模块,在.csv文件中搜索输入的用户名。如果它找到用户名,它将获取输入的密码并通过一个函数对其进行验证(密码在保存到.csv文件之前是经过salt和hash处理的)。你知道吗
我运行了下面的代码,对列表中的用户名和正确的密码、不在列表中的用户名、列表中的用户名和错误的密码进行了测试。你知道吗
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()
对于使用列表中的用户和正确的密码进行的测试,我会打印两次“in”语句,当我使用列表中的用户和错误的密码进行测试时,我会打印两次“Out”。虽然这是期望的结果,但我只想了解这里发生了什么。你知道吗
当我测试用户名不在列表中时,“Out”只打印一次。你知道吗
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:
您正在检查每行中每个字段的用户名和密码。因为每行有两个字段(“username”和“password”),所以它执行两次。你知道吗
解决方法是:
相关问题 更多 >
编程相关推荐