【问题标题】:SHA256: Padding a 512 bits length messageSHA256:填充 512 位长度的消息
【发布时间】:2015-10-14 19:02:25
【问题描述】:

我目前正在为“定制”嵌入式设备实施 SHA256 哈希算法。 显然我的消息填充有问题。 我编写的例程不适用于大小恰好等于 512 位的消息。

在这种情况下,应该如何填充消息? 即

M = "AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPP"

Z.

【问题讨论】:

    标签: c++ cryptography hashcode sha


    【解决方案1】:

    即使它开始时正好是 512 位,您仍然需要填充消息。

    FIPS 180-4, §5.1.1 解释如下:

    假设消息的长度 M 为 L 位。将位“1”附加到消息的末尾,然后是 k 个零位,其中 k 是方程 L + 1+ k ≡ 448 mod 512 的最小非负解。然后附加等于用二进制表示的数字 L 的 64 位块。

    [我用L 替换了一个显示不正确的字符]

    【讨论】:

    • 我试过了。但我没有得到预期的结果。请您详细说明填充块的十六进制表示形式吗?
    • 一个通过了我所有测试的实现怎么样? codereview.stackexchange.com/q/13288/489
    【解决方案2】:

    对于是块大小的精确倍数的数据,PKCS#7 填充表示您必须添加一个填充块,每个字节设置为填充字节数。在 AES 的情况下,块大小为 16 个字节,因此每个添加 16 个字节,值为 0x10。

    见PKCS#7 padding

    注意:PHP mcrypt 不做 PKCS#7 填充,必须由用户代码完成。

    【讨论】:

      猜你喜欢
      • 2019-03-14
      • 2014-06-03
      • 2017-02-02
      • 1970-01-01
      • 2012-10-30
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多