XOR 和 mod 的交换性
Commutativity of XOR and mod
因此,在探索哈希函数时,我注意到以下等式:
((129*N)^prev)%256 = ((129*N)%256)^prev
对于 0 到 255 之间的任何数字 N, prev
。基本上你可以将 mod 操作拖出而不改变结果,它只适用于数字 129。有人可以告诉我什么是129 这么特别?
在使用模块化算法时,碰巧
(a*b) mod m = ((a mod m) * (b mod m)) mod m
如果将此 属性 应用到 b = a
a^2 mod m = (a mod m)^2 mod m
并重复相同的 n
次
a^n mod m = (a mod m)^n mod m
并且由于这对 a
的任何值都有效,我们也得到
(a*b)^n mod m = (a*b mod m)^n mod m
因此,无论 m
是否为 256
以及 a
是否为 129
,属性 均有效。
然而,129
有一些非常特别的地方,因为 1, 127, 129
和 255
是唯一 mod 256
使得 r * r = 1 mod 256
的余数。另请注意 255 = -1 (mod 256)
和 127 = -129 mod 256
.
如果您将 256 取模解释为按位 AND 与 255,或者换句话说,仅保留最低有效 8 位,则更容易看出这一点。
显然 XOR 不会使信息从高位传输到低位(实际上没有向任何方向传输),因此无论发生什么 "up there" 都不会对低位产生任何影响。它可能对高位产生了影响(XOR 可以设置,然后根据 AND 是首先发生还是第二次发生,这些位分别保持设置或重置),但假设这里不会发生。
代数上,AND 分布在 XOR 上,所以
(a ^ b) & c =
& distributes over ^
(a & c) ^ (b & c)
我们有 b & c = b
因为 c
是 255 而 b
在 0 到 255 之间,所以
(a & c) ^ (b & c) =
by assumptions
(a & c) ^ b
这与乘法无关,它实际上可以是任何东西,我只是在这里称那部分为 a
。
互斥或与加法模 2 完全相同。
因此,在探索哈希函数时,我注意到以下等式:
((129*N)^prev)%256 = ((129*N)%256)^prev
对于 0 到 255 之间的任何数字 N, prev
。基本上你可以将 mod 操作拖出而不改变结果,它只适用于数字 129。有人可以告诉我什么是129 这么特别?
在使用模块化算法时,碰巧
(a*b) mod m = ((a mod m) * (b mod m)) mod m
如果将此 属性 应用到 b = a
a^2 mod m = (a mod m)^2 mod m
并重复相同的 n
次
a^n mod m = (a mod m)^n mod m
并且由于这对 a
的任何值都有效,我们也得到
(a*b)^n mod m = (a*b mod m)^n mod m
因此,无论 m
是否为 256
以及 a
是否为 129
,属性 均有效。
然而,129
有一些非常特别的地方,因为 1, 127, 129
和 255
是唯一 mod 256
使得 r * r = 1 mod 256
的余数。另请注意 255 = -1 (mod 256)
和 127 = -129 mod 256
.
如果您将 256 取模解释为按位 AND 与 255,或者换句话说,仅保留最低有效 8 位,则更容易看出这一点。
显然 XOR 不会使信息从高位传输到低位(实际上没有向任何方向传输),因此无论发生什么 "up there" 都不会对低位产生任何影响。它可能对高位产生了影响(XOR 可以设置,然后根据 AND 是首先发生还是第二次发生,这些位分别保持设置或重置),但假设这里不会发生。
代数上,AND 分布在 XOR 上,所以
(a ^ b) & c =
& distributes over ^
(a & c) ^ (b & c)
我们有 b & c = b
因为 c
是 255 而 b
在 0 到 255 之间,所以
(a & c) ^ (b & c) =
by assumptions
(a & c) ^ b
这与乘法无关,它实际上可以是任何东西,我只是在这里称那部分为 a
。
互斥或与加法模 2 完全相同。