【发布时间】:2021-10-31 16:19:29
【问题描述】:
在计算 SHA-1 时,我们需要一系列逻辑函数,f0, f1,…, f79,
我注意到维基百科和标准手册中的函数定义不同。
奇怪的是,当我选择标准手册中的那些时,SHA-1 结果出错了。
我用了网上的sha-1计算器,发现大家都用wikipedia上写的函数。
为什么?
【问题讨论】:
-
ft(x,y,z)函数,例如0≤t≤19时,wikipedia使用OR运算,而官方定义使用XOR。
在计算 SHA-1 时,我们需要一系列逻辑函数,f0, f1,…, f79,
我注意到维基百科和标准手册中的函数定义不同。
奇怪的是,当我选择标准手册中的那些时,SHA-1 结果出错了。
我用了网上的sha-1计算器,发现大家都用wikipedia上写的函数。
为什么?
【问题讨论】:
这里是'choose' (0..19) 和'majority' (40..59) 两个版本的真值表('parity' 20..39 和 60..79 两个来源都使用异或) .请找出 ior 结果与 xor 结果不同的行;这些是两个公式产生不同结果的情况。
| x | y | z | x^y | ¬x^z | ior | xor |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 | 1 | 1 |
| 0 | 1 | 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 1 | 0 | 0 | 0 | 0 |
| 1 | 1 | 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 | 1 | 1 |
| x | y | z | x^y | x^z | y^z | ior | xor |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
提示:没有区别。结果总是一样的,不管你用什么公式,只要你做对了,你就会得到正确的结果。
事实上,在检查我的 180-4 副本时,这甚至在第 4.1 节中就在您引用的部分上方进行了说明:
... [用于 SHA-1、SHA-256 组和 SHA-512 组] 的每个算法都包括 Ch(x, y, z) 和 Maj(x, y, z) 函数;这些函数中的异或运算 (⊕) 可以替换 通过按位或运算 (∨) 并产生相同的结果。
如果你做错了什么,那是因为你做错了什么,但这里没有人是通灵者,所以我们完全不知道你做错了什么。
【讨论】: