将位数组和二进制数学位移位为SHA-1

时间:2014-12-01 06:25:05

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

我发帖进行理智检查,如果这听起来有点基础,请原谅我。我想了解更多关于加密的知识,所以我认为一个好的启动项目将实现Sha-1哈希算法。我发现了一个walk-through,并且我不知道导演是错误的还是我对位数/旋转/二进制操作的理解是错误的。

来自文件:

  

步骤11.2:将它们放在一起

     

完成上述四个函数之一后,每个变量将继续执行此步骤,然后再使用下一个函数重新启动循环   字。对于这一步,我们将创建一个名为的新变量   'temp'并将其设置为:(左旋5)+ F + E + K +(   当前的话)。

     

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

     

我们将使用最后一个单词(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,但是这部分说我需要跟踪额外的位),程序的字节顺序会扰乱旋转(I使用小端)或者还有别的东西。

任何经验或见解都将受到赞赏!

1 个答案:

答案 0 :(得分:0)

你理解一切如何运作是正确的。问题在于文章(我写的)。无论是否必要,都必须在步骤11.2的开头添加一个额外的数字始终,如果没有必要,则应将其设置为1.

该文章现为:

  

请注意,此操作的结果比两个输入长一位。每次迭代后,新单词应比最后一个长一位。有时这将是一个必要的载体位(就像你需要表示在基数10中添加两个单位数字5和6的结果所需的额外位置值),并且当不需要时,你必须简单地预先添加1.正确地解决了我们需要最终截断那个额外的位;但是,我们不希望这样做直到最后!

该文章还不清楚在示例中显示已经旋转的A的事实。