|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
问题是1、 .digest()和.hexdigest() 分别输出的是什么?
2.IDLE 版本Python 3.7.9 下运行:
<
import hashlib
coda_md5 = hashlib.md5() #这里创建一个以md5格式编译的函数
user_dict = {}
name = input('请输入用户名:')
while True:
if name not in user_dict:
code = input('请输入密码:')
coda_md5.update(code.encode())
#code类型为字符串,encode()函数是将字符串已二进制模式读取
#.update()括号内容必须转码为二进制读取 例 字符串'2222' 需转码为b'2222'
user_dict.update({name:coda_md5.hexdigest()})
#.hexdigest()将md5二进制码转换回十六进制整形
y_or_n = input('是否继续输入(Y/N):')
if y_or_n == 'Y':
name = input('请输入用户名:')
continue
else:
break
else:
print('该用户名已被注册!')
y_or_n = input('是否重新输入(Y/N):')
if y_or_n == 'Y':
name = input('请重新输入用户名:')
continue
else:
break
print('''-------------------
目前已注册的用户有:''')
for i,j in user_dict.items():
print(i + ':' + j))
>
运行结果报错如下:
请输入用户名:鱼小二
请输入密码:222222
-------------------
目前已注册的用户有:
Traceback (most recent call last):
File "D:/Program Files (x86)/38课 网站用户密码MD5存储.py", line 18, in <module>
print(i + ':' + j)
TypeError: can only concatenate str (not "int") to str
为什么该处的变量j 是整形了?
digest() 返回的是二进制数
hexdigest() 返回的是 十六进制数
你对其进行拼接操作 Python 不懂你是想使用 加法 还是使用 字符串拼接而报错
将最后输出的 j 转换为字符串进行拼接即可输出,参考代码:import hashlib
coda_md5 = hashlib.md5() #这里创建一个以md5格式编译的函数
user_dict = {}
name = input('请输入用户名:')
while True:
if name not in user_dict:
code = input('请输入密码:')
coda_md5.update(code.encode())
# code类型为字符串,encode()函数是将字符串已二进制模式读取
# .update()括号内容必须转码为二进制读取 例 字符串'2222' 需转码为b'2222'
user_dict.update({name:coda_md5.hexdigest()})
#.hexdigest()将md5二进制码转换回十六进制整形
y_or_n = input('是否继续输入(Y/N):')
if y_or_n == 'Y':
name = input('请输入用户名:')
continue
else:
break
else:
print('该用户名已被注册!')
y_or_n = input('是否重新输入(Y/N):')
if y_or_n == 'Y':
name = input('请重新输入用户名:')
continue
else:
break
print('''-------------------
目前已注册的用户有:''')
for i,j in user_dict.items():
print(i + ':' + str(j)) # ------------------- 将此处 j 十六进制数转换为字符串即可
|
|