如何使用 xor 计算奇偶校验

How to calculate parity using xor


假设我们有这个号码 101001110110010 这是使用 XOR 计算奇偶校验的正确方法吗:

10100111011001 0
1 1 1 0 1 1 1 0
0 1 0 1
1 1
0

我最后回答了我自己的问题, 这个方法实际上是正确的,我在 python 的线性密码分析实现中使用它。

基本上,要使用 XOR 计算数字的奇偶校验,只需取每对 2 位并将它们异或在一起,继续这样做,直到剩下一个数字。

如果你需要的话,这里是实现

def FindParity(value):
    parity = 0
    while value > 0:
        extractedValue =  value % 2
        value //= 2
        parity = parity ^ extractedValue

    return parity

这个函数只需要一个数字就可以完成我在问题中手动做的事情。

作为对每一位进行异或运算的替代方法,我们可以依靠计算机对较大整数进行异或运算的能力。由两半 H 和 L 组成的大数的奇偶校验可以计算为 H^L 的奇偶校验。该定义给出了一个(尾)递归算法,该算法将每一步的大小减半,因此具有对数调用深度。可以迭代实现,例如:

def parity(x):
    shiftamount = 1
    while x >> shiftamount:
        x ^= x >> shiftamount
        shiftamount <<= 1
    return x & 1