鱼C论坛

 找回密码
 立即注册
查看: 2495|回复: 5

[已解决]在登录时,我输入正确密码会给我弹出密码错误

[复制链接]
发表于 2023-8-15 14:33:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码求助
在登录时,我输入正确密码会给我弹出密码错误
百思不得其解
我寻思我代码也没毛病啊
求大佬帮助
  1. """【注册】和【登陆】的代码"""

  2. #准备工作
  3. import hashlib
  4. content = {}

  5. #定义四个函数分别用于获取用户指令(get_int())、注册(register())、登陆(login())、MD5加密(encrypt())
  6. #获取用户指令(get_int())
  7. def get_int():
  8.     command = input("请输入指令:")
  9.     print("====================")
  10.     return int(command)

  11. #注册(register())
  12. def register():
  13.     name = input("请输入用户名:")
  14.     password_input = input("请输入密码:")
  15.     encrypted_password = encrypt(password_input)
  16.     content[name] = encrypted_password
  17.     print("恭喜,注册成功~")
  18.     print("====================")

  19. #MD5加密(encrypt())
  20. def encrypt(password):
  21.     encrypted_password = hashlib.md5(password.encode())
  22.     return encrypted_password
  23.       
  24. #登陆(login())
  25. def login():
  26.     while True:
  27.         name = input("请输入用户名:")
  28.         if name not in content:
  29.             print("该用户名不存在。")
  30.         else:
  31.             break
  32.     while True:
  33.         password_test = input("请输入密码:")
  34.         encrypted_password = encrypt(password_test)
  35.         if content[name] != encrypted_password:
  36.             print("密码错误!")
  37.         else:
  38.             print("恭喜,登录成功~")
  39.             break
  40.     print("====================")   
  41.         
  42. #开始运行   
  43. print("欢迎来到鱼C论坛~")
  44. print("====================")
  45. print("""1. 注册
  46. 2. 登陆
  47. 3. 退出""")
  48. while True:
  49.     command = get_int()
  50.     if command  == 1:
  51.         register()
  52.     elif command == 2:
  53.         login()
  54.     elif command == 3:
  55.         break
复制代码

谢谢

最佳答案
2023-8-15 14:46:58
md5要调用hexdigest获取密文,否则返回的只是一个md5 HASH对象,而加密同一串字符串返回的对象是不同的
  1. >>> import hashlib
  2. >>> a = hashlib.md5(b'a')
  3. >>> b = hashlib.md5(b'a')
  4. >>> a == b
  5. False
复制代码

将encrypt修改为:
  1. def encrypt(password):
  2.     encrypted_password = hashlib.md5(password.encode()).hexdigest()
  3.     return encrypted_password
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-15 14:34:01 | 显示全部楼层
问题出在登录函数中的密码比对部分。在每次比对密码时,都会重新对输入的密码进行MD5加密,然后与注册时保存的加密密码进行比对。这样会导致每次比对的结果都不相等,即使输入的密码是正确的。解决方法是在登录函数中,只对输入的密码进行一次MD5加密,然后与注册时保存的加密密码进行比对。

以下是修改后的代码:

  1. # 登陆(login())
  2. def login():
  3.     while True:
  4.         name = input("请输入用户名:")
  5.         if name not in content:
  6.             print("该用户名不存在。")
  7.         else:
  8.             break
  9.     while True:
  10.         password_test = input("请输入密码:")
  11.         encrypted_password = encrypt(password_test)
  12.         if content[name] != encrypted_password:
  13.             print("密码错误!")
  14.         else:
  15.             print("恭喜,登录成功~")
  16.             break
  17.     print("====================")
复制代码


在这个版本的代码中,只在输入密码后进行一次MD5加密,然后与注册时保存的加密密码进行比对。这样就可以正确地判断密码是否正确了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-15 14:36:37 | 显示全部楼层
isdkz 发表于 2023-8-15 14:34
问题出在登录函数中的密码比对部分。在每次比对密码时,都会重新对输入的密码进行MD5加密,然后与注册时保 ...

我寻思你也没有改我的代码啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-15 14:46:58 | 显示全部楼层    本楼为最佳答案   
md5要调用hexdigest获取密文,否则返回的只是一个md5 HASH对象,而加密同一串字符串返回的对象是不同的
  1. >>> import hashlib
  2. >>> a = hashlib.md5(b'a')
  3. >>> b = hashlib.md5(b'a')
  4. >>> a == b
  5. False
复制代码

将encrypt修改为:
  1. def encrypt(password):
  2.     encrypted_password = hashlib.md5(password.encode()).hexdigest()
  3.     return encrypted_password
复制代码

评分

参与人数 1贡献 +3 收起 理由
歌者文明清理员 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-15 14:48:16 | 显示全部楼层
鱼cpython学习者 发表于 2023-8-15 14:46
md5要调用hexdigest获取密文,否则返回的只是一个md5 HASH对象,而加密同一串字符串返回的对象是不同的

...

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-15 14:54:08 | 显示全部楼层
鱼cpython学习者 发表于 2023-8-15 14:46
md5要调用hexdigest获取密文,否则返回的只是一个md5 HASH对象,而加密同一串字符串返回的对象是不同的

...

感谢哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 02:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表