在维基百科SHA-1 pseudocode中,它说:
预处理:将位'1'附加到消息中,例如通过添加0x80 如果消息长度是8位的倍数。追加0≤k< 512位 '0',这样得到的消息长度为位
与\x01
和x00\x01
相同吗?
Python示例:
import hashlib
for s in ('01', '0001'):
m=hashlib.sha1()
m.update(s.decode('hex'))
print m.hexdigest()
>>>bf8b4530d8d246dd74ac53a13471bba17941dff7
>>>0e356ba505631fbf715758bed27d503f8b260e3a
事实证明不是一样的,为什么?
答案 0 :(得分:1)
\x01
和\x0001
不能相同。
我认为你误解了Wiki中的伪代码。在这里,我以\x01
和\x0001
为例,其长度小于512
位。
(现在假设原始消息长度小于448
位)
1
位,然后附加0
。因此,对于\x01
,它变为\x01800000...000
,其长度为448位,省略号代表十六进制中的0
。
(512 - 448) = 64
位来表示其原始长度。 因此,对于\x01
,其原始长度为8
,它应附加\x00000000 00000008
。
如上所述,预处理后,\x01
变为\x01800000...08
,整个长度为512,省略号代表十六进制中的0
。< / p>