XOR运算后找到C(和XOR可逆性)

时间:2010-05-28 18:37:27

标签: c++ xor

假设:

unsigned char A = 10;
unsigned char B = 11;
unsigned char C = 12;


unsigned char Diff1 = A ^ B;
unsigned char Diff2 = B ^ C;

//find any of A or B or C using Diff1 and Diff2

问题是:最初有3个值我们发现了2个差异。有没有什么方法可以找到使用2个差异Diff1和Diff2的A或B或C中的任何一个?

我知道除非你知道密钥,否则XOR是不可逆的,但要注意无符号__int8是0 ... 255最多256个不同的值。

保持健康。

1 个答案:

答案 0 :(得分:7)

您只有了解Diff1Diff2的值,才能找到足够的信息来查找A,B或C中的任何一个。

有256 ** 3个不同的可能输入,只有256 ** 2个可能的输出,因此对于每个输出,有256个不同的可能输入可以给出该输出 - 其中A,B和C可以是任何值。但是一旦你知道其中任何一个,你就可以计算另外两个。

有效地,您在明文(B)上使用XOR加密两次,使用两个单独的未知密钥(A和C)。 XOR加密绝对不可能反转 - 输出中根本没有有用的信息(假设密钥是随机均匀选择的,永远不会重复使用)。

您可以找到A XOR C

Diff1 ^ Diff2