在登录时,我输入正确密码会给我弹出密码错误
代码求助在登录时,我输入正确密码会给我弹出密码错误
百思不得其解
我寻思我代码也没毛病啊
求大佬帮助
"""【注册】和【登陆】的代码"""
#准备工作
import hashlib
content = {}
#定义四个函数分别用于获取用户指令(get_int())、注册(register())、登陆(login())、MD5加密(encrypt())
#获取用户指令(get_int())
def get_int():
command = input("请输入指令:")
print("====================")
return int(command)
#注册(register())
def register():
name = input("请输入用户名:")
password_input = input("请输入密码:")
encrypted_password = encrypt(password_input)
content = encrypted_password
print("恭喜,注册成功~")
print("====================")
#MD5加密(encrypt())
def encrypt(password):
encrypted_password = hashlib.md5(password.encode())
return encrypted_password
#登陆(login())
def login():
while True:
name = input("请输入用户名:")
if name not in content:
print("该用户名不存在。")
else:
break
while True:
password_test = input("请输入密码:")
encrypted_password = encrypt(password_test)
if content != encrypted_password:
print("密码错误!")
else:
print("恭喜,登录成功~")
break
print("====================")
#开始运行
print("欢迎来到鱼C论坛~")
print("====================")
print("""1. 注册
2. 登陆
3. 退出""")
while True:
command = get_int()
if command== 1:
register()
elif command == 2:
login()
elif command == 3:
break
谢谢
问题出在登录函数中的密码比对部分。在每次比对密码时,都会重新对输入的密码进行MD5加密,然后与注册时保存的加密密码进行比对。这样会导致每次比对的结果都不相等,即使输入的密码是正确的。解决方法是在登录函数中,只对输入的密码进行一次MD5加密,然后与注册时保存的加密密码进行比对。
以下是修改后的代码:
# 登陆(login())
def login():
while True:
name = input("请输入用户名:")
if name not in content:
print("该用户名不存在。")
else:
break
while True:
password_test = input("请输入密码:")
encrypted_password = encrypt(password_test)
if content != encrypted_password:
print("密码错误!")
else:
print("恭喜,登录成功~")
break
print("====================")
在这个版本的代码中,只在输入密码后进行一次MD5加密,然后与注册时保存的加密密码进行比对。这样就可以正确地判断密码是否正确了。 isdkz 发表于 2023-8-15 14:34
问题出在登录函数中的密码比对部分。在每次比对密码时,都会重新对输入的密码进行MD5加密,然后与注册时保 ...
我寻思你也没有改我的代码啊 md5要调用hexdigest获取密文,否则返回的只是一个md5 HASH对象,而加密同一串字符串返回的对象是不同的
>>> import hashlib
>>> a = hashlib.md5(b'a')
>>> b = hashlib.md5(b'a')
>>> a == b
False
将encrypt修改为:
def encrypt(password):
encrypted_password = hashlib.md5(password.encode()).hexdigest()
return encrypted_password
鱼cpython学习者 发表于 2023-8-15 14:46
md5要调用hexdigest获取密文,否则返回的只是一个md5 HASH对象,而加密同一串字符串返回的对象是不同的
...
{:5_106:} 鱼cpython学习者 发表于 2023-8-15 14:46
md5要调用hexdigest获取密文,否则返回的只是一个md5 HASH对象,而加密同一串字符串返回的对象是不同的
...
感谢哈
页:
[1]