Python中的hexdigest是什么?

10
我们需要一个哈希代码如下:
from hashlib import sha256
Hash = sha256(b"hello").hexdigest()
#Hash = '2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824'

hexdigest 似乎是主要的操作,因为如果没有它,我们将得到以下结果:

Hash = sha256(b"hello")
#Hash = <sha256 HASH object @ 0x000001E92939B950>

使用hexdigest是必须的,因为如果不使用它,将会得到另一种输出结果,但是它具体有什么作用呢?

3
hash.hexdigest()的文档中可以得知:摘要将以字符串对象的形式返回,长度为原始信息的两倍,并只包含十六进制数字。这可用于在电子邮件或其他非二进制环境中安全地交换值。 - metatoaster
3
文档不够吗?https://docs.python.org/3/library/hashlib.html#hashlib.hash.hexdigest - Iain Shelvington
1个回答

12
实际的摘要是一个非常大的数字。它通常被表示为一串十六进制数字,因为我们人类对于超过一小撮数字的处理能力不是很好(而且十六进制有一个优点,它能很好地显示一些二进制模式;例如,你很难推理出一个数字像4,262,789,120这样,而它的十六进制表示FE150000很容易显示出低16位都是零),但这个“对象”不仅仅是一个数字;它是一个带有方法的类实例,允许您以块的方式添加更多数据,这样您就可以逐步计算大文件或数据流的摘要,而无需将其全部保存在内存中。您可以将摘要对象视为允许重复执行此操作的状态集合,并将十六进制摘要方法视为查询其在输入流中当前位置的状态的方式。
你可以争论接口可以是不同的 - 例如,`str(Hash)`可以生成十六进制表示;但这只是把问题推到了一个不同的、可能更隐晦的角落。
为了完整性,hexdigest在Python中通常没有明确定义。它是标准库中hashlib模块中一组方法的名称,本文讨论了该特定用例。其他库可能有一个同名但语义完全不同的方法;或者它们可能有一个同样目的但名称完全不同的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接