我正在尝试用python 3编写SHA-256的实现。我的版本应该采用十六进制编码并输出相应的哈希值。我用 https://en.wikipedia.org/wiki/SHA-2#Pseudocode 作为指导。
我的函数适用于大多数输入,但有时它给出的输出只有 63 位(而不是 64 位(。我的函数使用 32 位二进制字符串。
我想我已经找到了问题,在算法的最后一步二进制加法
h4 := h4 + e (or another h-vector and corresponding letter)
生成一个太小的二进制数。我做的最后一件事是使用 hex((,我应该得到一个 8 个字符的字符串。在这个例子中,我只得到 7。
out4 = hex(int(h4,2(([2:]
一个有问题的输入是 e5e5e5 它给 "10110101111110101011010101101100"表示 h4,"01010001000011100101001001111111"表示 e 所以加法给出了"00000111000010010000011111101011" 和 out4 = 70907eb。
在这些情况下我应该怎么做?
我应该得到一个 8 个字符的字符串
你为什么这么认为?hex
不允许指定输出的长度,因此,例如,如果正确的输出是 8 个字节的零,hex
将返回0x0
- 尽可能最短的表示形式。
我猜正确的输出应该从零开始,但hex
正在切断它。 使用格式字符串指定输出的长度:
In [1]: f'{0:08x}'
Out[1]: '00000000' # lowercase hexadecimal (x) digits that must fit into at least 8 characters, prefixed with zero (08) as needed