【发布时间】:2020-05-15 16:00:55
【问题描述】:
你能帮我理解这么简单的主题吗?我需要生成一系列我正在使用的随机十六进制字符串:
import secrets
x = secrets.token_hex(32)
这给了我这样的东西:
d6d09acbe78c269147803b8c351214a6e5f39093ca315c47e1126360d0df5369
这完全没问题。现在我需要通过我正在使用的 SHA256 哈希来传递它:
h = hashlib.new('sha256')
print (h.update(x))
得到错误:
TypeError: Unicode-objects must be encoded before hashing
我读到我需要在使用 .encode() 传递哈希之前对字符串进行编码,从而获得一个完全奇怪的结果:
b'd6d09acbe78c269147803b8c351214a6e5f39093ca315c47e1126360d0df5369'
,并且哈希结果为“无”。
你能告诉我这里发生了什么吗?
非常感谢各位。
【问题讨论】:
-
h.update(x.encode())适合我。您使用的是哪个版本的 Python?我看到您正在尝试打印.update(x)的返回值,即None。你应该在运行.update()之后打印h.hexdigest()。详情请见docs。