【问题标题】:Bit shifting a bit array and binary math for SHA-1位移位数组和 SHA-1 的二进制数学
【发布时间】:2015-01-29 03:04:02
【问题描述】:

我发布的是健全性检查,所以如果这听起来有点基本,请原谅我。我正在尝试了解有关加密的更多信息,因此我认为一个好的入门项目将是实现 Sha-1 哈希算法。我找到了walk-through 并且已经到了我不知道演练是否错误或我对位/旋转/二进制操作的理解错误的地步。

来自文档:

步骤 11.2:将它们放在一起

完成上述四个功能之一后,每个变量将继续执行此步骤,然后使用下一个重新开始循环 单词。对于这一步,我们将创建一个名为的新变量 'temp' 并将其设置为: (A 左旋转 5) + F + E + K + (the 当前单词)。

请注意,除了左旋转之外,我们正在做的唯一操作是基本加法。二进制加法就这么简单 可以。

我们将使用最后一个单词 (79) 的结果作为此步骤的示例。

A lrot 5:
00110001000100010000101101110100
F:
10001011110000011101111100100001
A lrot 5 + F
Out:
110111100110100101110101010010101

请注意,此操作的结果比两个输入长一位。这就像添加 5 和 6,你需要一个新的 位值来表示答案。为了一切顺利 正确地,我们最终需要截断额外的位。然而, 我们直到最后都不想这样做!

这并不完全奏效。我认为会发生的是:

A = 00110001000100010000101101110100
F = 10001011110000011101111100100001
A Left rotate 5 = 00100010001000010110111010000110
(A Left Rotate 5) + F = 10101101111000110100110110100111 (which is still 32 bits)

我需要的只是另一双眼睛说“是的,krtzer,你是对的,这个文件是错误的”或者“你对位、字节序和/或位旋转的理解是错误的,这就是它的方式工作”。

现在我不确定我的整数表示是否错误(规范说使用 U32s,但本节说我需要跟踪额外的位),我的程序的字节序扰乱了旋转(我使用little endian)或者还有别的东西。

我们将不胜感激任何经验或见解!

【问题讨论】:

    标签: hash bit-manipulation sha1 binary-data endianness


    【解决方案1】:

    您对一切运作方式的理解是正确的。问题出在文章(我写的)上。在步骤 11.2 的开头必须总是添加一个额外的数字,无论是否需要,如果不需要,则应设置为 1。

    文章现在改为:

    请注意,此操作的结果比两个输入长一位。每次迭代后,新词应该比上一个长一点。有时这将是一个必要的载波位(例如,您需要额外的位值来表示以 10 为基数的两个个位数 5 和 6 相加的结果),当不需要时,您必须简单地在前面加上一个 1。正确解决我们最终需要截断多余的部分;但是,我们直到最后都不想这样做!

    文章还不清楚示例中显示了一个已经旋转的 A。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 2018-05-18
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      • 2018-09-15
      相关资源
      最近更新 更多