【发布时间】:2015-08-13 15:30:07
【问题描述】:
我在VHDL 中实现SHS 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 位二进制表示。
用一个例子回答了here 提出的类似问题:
好吧,如果 l = 448(比方说),规范中方程的解给出 k = 511
我知道 511 是从哪里来的,但我不知道如何更改方程式来获得这个数字。使用上面的公式得到k = -1。我意识到如果 k 为负数,我可以将 512 添加到结果 k 中,这将为我提供正确的答案。但是,我想知道是否有一个单线方程可以避免检查。
谢谢!
【问题讨论】:
-
见What topics can I ask about here? 有些问题仍然离题,... 1. 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括期望的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建Minimal, Complete, and Verifiable example。
-
想解释一下我的问题在什么方面离题/不清楚?
-
如何在VHDL硬件模型中实现填充取决于实现细节,模型流吗?接口多宽?进一步参见SHA-256 in FPGA II。 SHA-256 描述,B. 预处理,注意在流模型中这不是预处理,而是在输入流结束时所做的事情。道德是不要将 VHDL 视为通用编程语言,它描述的是硬件。
-
虽然我提到我使用的是 VHDL,但我问的问题根本不是语言或实现特定的。我只是想了解如何得出价值。也许我不应该提到我使用的是 VHDL,因为这更像是一个概念性问题。