在python3中实现SHA256,最终哈希太短



我正在尝试用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

最新更新