舍侠 发表于 2022-5-2 16:24:54

38讲动动手1题

user = input("请输入用户名:")

initialuserpassword = {"小甲鱼":"I_love_FishC","不二如是":"FishC5201314"}
while user in initialuserpassword:
    print("改用户名已被注册!!!")
    user = input("请重新输入用户名:")
password = input("请输入密码:")
initialuserpassword = password
   
print("-------------\n目前已注册的用户名是:")
for each in initialuserpassword:
    print(each)
values = initialuserpassword.values()
print(values)
import hashlib
for pwd in values:
    print(pwd)
    result = hashlib.md5(b"str(pwd)")
    print(result.hexdigest())
以上是我想到的,结果如下
请输入用户名:的加拉法
请输入密码:123
-------------
目前已注册的用户名是:
小甲鱼
不二如是
的加拉法
dict_values(['I_love_FishC', 'FishC5201314', '123'])
I_love_FishC
450c77ff2d8fd9a27d9902f05927c7b6
FishC5201314
450c77ff2d8fd9a27d9902f05927c7b6
123
450c77ff2d8fd9a27d9902f05927c7b6
很显然没有实现题目要求,可是我也不知道加密的那个参数该怎么放,而且加密结果还是重复的

isdkz 发表于 2022-5-2 16:29:23

user = input("请输入用户名:")

initialuserpassword = {"小甲鱼":"I_love_FishC","不二如是":"FishC5201314"}
while user in initialuserpassword:
    print("该用户名已被注册!!!")
    user = input("请重新输入用户名:")
password = input("请输入密码:")
initialuserpassword = password
   
print("-------------\n目前已注册的用户名是:")
for each in initialuserpassword:
    print(each)
values = initialuserpassword.values()
print(values)
import hashlib
for pwd in values:
    print(pwd)
    result = hashlib.md5(pwd.encode()) # 你那个是对同一个字节串b"str(pwd)"进行hash,当然结果一样了
    print(result.hexdigest())

isdkz 发表于 2022-5-2 16:33:04

加密后你直接修改原来的字典即可:

user = input("请输入用户名:")

initialuserpassword = {"小甲鱼":"I_love_FishC","不二如是":"FishC5201314"}
while user in initialuserpassword:
    print("该用户名已被注册!!!")
    user = input("请重新输入用户名:")
password = input("请输入密码:")
initialuserpassword = password
   
print("-------------\n目前已注册的用户名是:")
for each in initialuserpassword:
    print(each)

import hashlib
for k, v in initialuserpassword.items():
    initialuserpassword = hashlib.md5(v.encode()).hexdigest()

print('-------------')
print('加密后:')
print(initialuserpassword)

舍侠 发表于 2022-5-2 17:13:25

isdkz 发表于 2022-5-2 16:29


pwd 不是一个变量吗?不是取自于values的三个值吗?

舍侠 发表于 2022-5-2 17:13:57

isdkz 发表于 2022-5-2 16:33
加密后你直接修改原来的字典即可:

厉害,我看看,学习学习,嘿嘿

isdkz 发表于 2022-5-2 17:14:42

舍侠 发表于 2022-5-2 17:13
pwd 不是一个变量吗?不是取自于values的三个值吗?

对呀,但是字典里面的键值就是字符串呀,字符串可以使用 encode 方法变成 字节串

舍侠 发表于 2022-5-2 17:18:17

isdkz 发表于 2022-5-2 17:14
对呀,但是字典里面的键值就是字符串呀,字符串可以使用 encode 方法变成 字节串

我就是说的加密结果重复的那个,变量不是三个值吗?怎么加密出来是重复的呢,哪里出现错误了?

isdkz 发表于 2022-5-2 17:20:30

舍侠 发表于 2022-5-2 17:18
我就是说的加密结果重复的那个,变量不是三个值吗?怎么加密出来是重复的呢,哪里出现错误了?

你用 b"str(pwd)" 的话,就是直接把 str(pwd) 当成一个字节串了呀,

而不是函数调用 str(pwd),同一个字节串当然结果一样了

舍侠 发表于 2022-5-2 17:23:17

isdkz 发表于 2022-5-2 17:20
你用 b"str(pwd)" 的话,就是直接把 str(pwd) 当成一个字节串了呀,

而不是函数调用 str(pwd),同一个 ...

好的,那我再试试str(pwd)

isdkz 发表于 2022-5-2 17:24:54

舍侠 发表于 2022-5-2 17:23
好的,那我再试试str(pwd)

pwd 本来就是字符串了,没必要用 str,还有 hash.md5 需要字节串,

所以你直接把 str 的返回值传进去是不行的,字符串跟字节串是不一样的

舍侠 发表于 2022-5-3 10:20:47

isdkz 发表于 2022-5-2 17:24
pwd 本来就是字符串了,没必要用 str,还有 hash.md5 需要字节串,

所以你直接把 str 的返回值传进去 ...


页: [1]
查看完整版本: 38讲动动手1题