【问题标题】:Calculating k for padding of SHA-256 message计算 k 以填充 SHA-256 消息
【发布时间】: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,因为这更像是一个概念性问题。

标签: algorithm hash


【解决方案1】:

我意识到我可以将 512 添加到等式的 rhs 中,然后将整个事物按 512 修改:

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

这会处理否定答案。

【讨论】:

    猜你喜欢
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 2015-03-18
    • 2012-06-15
    • 2013-06-27
    • 2019-04-08
    • 2023-03-27
    相关资源
    最近更新 更多