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

Jas*_*n z -1 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
Run Code Online (Sandbox Code Playgroud)

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

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

保持良好.

Mar*_*ers 7

您没有足够的信息来从刚刚知道的值找到任何A,B或C的Diff1Diff2.

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

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

你可以找到A XOR C:

Diff1 ^ Diff2
Run Code Online (Sandbox Code Playgroud)