Python:获取Python中单个位的sha256()哈希摘要

2uluyalo  于 2023-05-21  发布在  Python
关注(0)|答案(2)|浏览(140)

或者,一般来说,不是8的倍数的任何任意数或位。
根据hashlib.py,有一个名为SHA 256的构造器方法。然后使用sha 256()创建一个SHA 256哈希对象。我现在可以使用update()方法向这个对象提供任意字符串,并且在任何时候我都可以使用digest()或hexdigest()方法向它请求到目前为止提供的字符串串联的摘要。
好吧。我想饲料1位SHA 256与此链接"What is the SHA-256 hash of a single '1' bit?"线
当然是在Python 2.7中。
那么,对由位“1”组成的1位长的输入进行散列的过程是什么?(不是8位长字节[] { 1 }输入)?

zi8p0yeb

zi8p0yeb1#

hashlib API和底层C模块都不支持“字节缓冲区”以外的任何东西。
由于SHA标准规定向 any 消息添加一些东西,无论长度如何,您甚至不能在python中“预填充”您的输入以绕过该限制。
演示(摘自https://www.rfc-editor.org/rfc/rfc4634#section-4.1):

>>> sha256('abcde').hexdigest()
'36bbe50ed96841d10443bcb670d6554f0a34b761be67ec9c4a8ad2c0c44ca42c'

>>> sha256('abcde\x80' + 57*'\x00' + '\x28').hexdigest()
'45cb103e6385e1330c892d1566d4d82f0c1c256947e54206704973c6c2adf4f6'

虽然计算长度不是8的倍数的消息的哈希在技术上是允许的,但我非常怀疑是否有真实的的用例(只需要使用Python标准库)。

8xiog9wr

8xiog9wr2#

可以使用https://pypi.org/project/sha256bit/
与hashlib相同的接口,除了update函数有一个可选参数bitlen来支持位粒度。

>>> from sha256bit import sha256bit
>>> h=sha256bit()
>>> h.update(b'\x00',bitlen=1)
>>> h.hexdigest()
'bd4f9e98beb68c6ead3243b1b4c7fed75fa4feaab1f84795cbd8a98676a2a375'

相关问题