import hashlib
pwd = "aaa" + chr(163) + "cd"
checkcode = hashlib.md5(pwd).hexdigest()
print (checkcode)
运行报错
Traceback (most recent call last):
File "/Users/jiangyd/PycharmProjects/untitled16/b.py", line 55, in <module>
checkcode = hashlib.md5(pwd).hexdigest()
TypeError: Unicode-objects must be encoded before hashing
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Python中,当你尝试使用hashlib.md5()
对字符串进行哈希时,如果字符串是Unicode类型(在Python 3中,所有的字符串默认都是Unicode),你需要先将其编码为字节串(bytes)。这是因为hashlib.md5()
期望一个字节序列作为输入,而不是直接的Unicode字符串。
根据你的代码,你似乎想将密码字符串"aaa"、字符'\x163'(虽然这里的表示可能有误,通常我们用\u163
来表示Unicode字符,但这里我假设你想表达的是ASCII字符163,即chr(163)
,对应于£
符号)以及"cd"组合起来进行哈希。不过,直接在字符串中写\x163
这样的转义序列在Python中并不正确表示字符163,应使用chr(163)
或其对应的字符。同时,为了正确地进行哈希,你需要将这些部分合并并编码。
修正后的代码如下:
import hashlib
# 合并字符串,并通过encode方法将其转换为字节串
pwd = "aaa" + chr(163) + "cd"
pwd_encoded = pwd.encode('utf-8') # 假设你的字符串包含的是UTF-8编码的字符
checkcode = hashlib.md5(pwd_encoded).hexdigest()
print(checkcode)
这段代码首先将多个字符串部分合并,然后使用encode('utf-8')
方法将其转换为UTF-8编码的字节串,之后再传递给hashlib.md5()
进行哈希处理,最后输出哈希值的十六进制表示。这样应该能解决你遇到的TypeError问题。