【发布时间】: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