计算SHA-256消息填充的k



我正在VHDL中实现SHS SHA-256算法,当用零填充消息时,我很难想出一种方法来解决k的方程。该方程在SHS描述中概述如下:

将位"1"追加到消息,后面是k 0位,其中k是方程的最小非负解l + 1 + k ≡ 448mod512 .

我已经看到了等式k = 448 - (l mod 512 + 1),如果l mod 512小于或等于448,但如果它更大,你得到一个负数k。我理解在这种情况下,我们只需要附加"1",填充"0"s,直到我们达到512,然后填充448个零,后面是消息长度的64位二进制表示。

这里有一个类似的问题,可以用一个例子来回答:

好吧,如果l = 448(假设),则规范中方程的解为k = 511

我知道511是从哪里来的,但我不知道如何改变方程来得到这个数字。使用上面的方程得到k = -1。我意识到在k为负的情况下,我可以给结果k加上512,这将得到正确的答案。但是,我想知道是否有一个单行方程可以避免检查。

谢谢!

我意识到我可以把512加到方程的rhs上,然后把整个式子乘以512,如下所示:

k = (512 + 448 - (l mod 512 + 1)) mod 512

这是否定答案

最新更新