Algorithm 计算SHA-256消息填充的k

Algorithm 计算SHA-256消息填充的k,algorithm,hash,Algorithm,Hash,我正在用VHDL实现SHA-256算法,在用零填充消息时,我很难找到一种方法来解决k的方程。该方程式在SHS说明中概述如下: 将位“1”追加到 消息,后跟k零位,其中k是方程的最小非负解 l+1+k≡ 448mod512 我已经看到了方程k=448-(l mod 512+1),如果l mod 512小于或等于448,则该方程有效,但如果它更大,则k为负数。我知道在这种情况下,我们只需要在“1”后面加上“0”,直到达到512,然后再加448个零,后面是消息长度的64位二进制表示 下面用一个例子回答

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

将位“1”追加到 消息,后跟k零位,其中k是方程的最小非负解
l+1+k≡ 448mod512

我已经看到了方程
k=448-(l mod 512+1)
,如果
l mod 512
小于或等于448,则该方程有效,但如果它更大,则k为负数。我知道在这种情况下,我们只需要在“1”后面加上“0”,直到达到512,然后再加448个零,后面是消息长度的64位二进制表示

下面用一个例子回答了一个类似的问题:

那么,如果l=448(比如说),规范中方程的解给出k=511

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


谢谢

我意识到我可以把512加到方程的rhs中,然后用512来修改整个方程:

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


这就解决了否定答案。

看,有些问题仍然离题,。。。1.寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建。是否愿意解释我的问题以何种方式脱离主题/不清楚?如何在VHDL硬件模型中实现填充取决于实现细节,模型是否流?接口有多宽?进一步见二。SHA-256说明,B.预处理,注意在流模型中这不是预处理,而是在输入流结束时所做的。寓意是不要将VHDL视为一种通用编程语言,它描述硬件。虽然我提到我使用的是VHDL,但我问的问题实际上并不是特定于语言或实现的。我只是想了解如何得出这个值。也许我不应该提到我使用的是VHDL,因为这更像是一个概念性的问题。