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, 129255 是唯一 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 完全相同。

https://en.wikipedia.org/wiki/Exclusive_or