【问题标题】:Random hex string get 'none' when sha256 in pythonpython中sha256时随机十六进制字符串得到'none'
【发布时间】: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

标签: python hash hex sha256


【解决方案1】:

您正在尝试打印 h.update() 的输出,该输出将为 None,因为它不返回任何内容。而是使用

h.update(x.encode())
print(h.hexdigest())

打印出一个哈希字符串。

【讨论】:

    猜你喜欢
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2010-10-04
    • 2012-05-24
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    相关资源
    最近更新 更多