我正在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
这是否定答案