2017-09-14 79 views
1
的单个比特的获得SHA256()散列摘要

或者,在一般情况下,即不是8的Python:在Python

多任何任意数目或位根据hashlib.py有被命名为一个构造方法SHA256 。然后我使用sha256()创建一个SHA256哈希对象。现在我可以使用update()方法为任意字符串提供此对象,并且在任何时候,我都可以使用digest()或hexdigest()方法向它提供输入给它的字符串摘要的摘要。

好吧。我想喂1位到符合这个链接的SHA256 "What is the SHA-256 hash of a single '1' bit?"

在Python 2.7中,当然。

那么,散列1位长输入由位“1”组成的过程是什么? (不是8位长字节[] {1}输入)?

+0

是的,但填充是根据输入的长度以位为单位完成的。在其他语言中有一些例子,[RFC 4634] [2]的[第8节] [1]中有C代码可用于计算不一定是8位倍数的数据的散列。查看名称为“SHA * FinalBits(...)'的方法。 [1]:http://tools.ietf.org/html/rfc4634#section-8 [2]:http://tools.ietf.org/html/rfc4634 –

+0

是的,但是没有1 BIT TYPE in PYTHON – hop

+0

当然有,它被称为布尔值。 – allo

回答

2

hashlib API和基础C模块都不支持“字节缓冲区”以外的任何其他功能。

由于SHA标准规定为任何消息添加一些东西,无论长度如何,您甚至不能在python中“预填充”输入以避开该限制。

为了证明(从https://tools.ietf.org/html/rfc4634#section-4.1拍摄):

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

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

虽然计算,其长度是不是8的倍数的消息的哈希值可能在技术上是允许的,我也很怀疑有实世界使用情况(这只需要使用python标准库,不少于)。