如何使用 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
假设我们有这个号码 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