Hash 位数组的位移位和SHA-1的二进制数学

Hash 位数组的位移位和SHA-1的二进制数学,hash,bit-manipulation,sha1,binary-data,endianness,Hash,Bit Manipulation,Sha1,Binary Data,Endianness,我张贴了一个健全的检查,所以请原谅我,如果这听起来有点基本。我正在努力学习更多关于加密的知识,所以我认为一个好的入门项目是实现Sha-1哈希算法。我发现了一个错误,我不知道遍历是否错误,或者我对位/旋转/二进制操作的理解是否错误 从文件中: 步骤11.2:将它们放在一起 在完成上述四个函数中的一个之后,每个变量将继续执行此步骤,然后使用下一个函数重新启动循环 单词对于这一步,我们将创建一个名为 “temp”并将其设置为:(A左旋转5)+F+E+K+(温度 当前单词) 请注意,除了左旋转,我们所做

我张贴了一个健全的检查,所以请原谅我,如果这听起来有点基本。我正在努力学习更多关于加密的知识,所以我认为一个好的入门项目是实现Sha-1哈希算法。我发现了一个错误,我不知道遍历是否错误,或者我对位/旋转/二进制操作的理解是否错误

从文件中:

步骤11.2:将它们放在一起

在完成上述四个函数中的一个之后,每个变量将继续执行此步骤,然后使用下一个函数重新启动循环 单词对于这一步,我们将创建一个名为 “temp”并将其设置为:(A左旋转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,但本节说我需要跟踪额外的位),我的程序的尾端是否会弄乱旋转(我使用小尾端),或者还有其他原因


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

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

该条现为:

请注意,此操作的结果比两个输入长一位。在每次迭代之后,新单词应该比上一个长一点。有时,这将是一个必要的载波位(例如,需要额外的位置值来表示以10为底的两个单位数字5和6相加的结果),如果不需要,则必须简单地在1前面加上。为了使一切正常工作,我们最终需要截断额外的部分;然而,我们不想这样做,直到结束

文章还不清楚示例中是否显示了已旋转的A