我发帖进行理智检查,如果这听起来有点基础,请原谅我。我想了解更多关于加密的知识,所以我认为一个好的启动项目将实现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使用小端)或者还有别的东西。
任何经验或见解都将受到赞赏!
答案 0 :(得分:0)
你理解一切如何运作是正确的。问题在于文章(我写的)。无论是否必要,都必须在步骤11.2的开头添加一个额外的数字始终,如果没有必要,则应将其设置为1.
该文章现为:
请注意,此操作的结果比两个输入长一位。每次迭代后,新单词应比最后一个长一位。有时这将是一个必要的载体位(就像你需要表示在基数10中添加两个单位数字5和6的结果所需的额外位置值),并且当不需要时,你必须简单地预先添加1.正确地解决了我们需要最终截断那个额外的位;但是,我们不希望这样做直到最后!
该文章还不清楚在示例中显示已经旋转的A的事实。