假设:
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个不同的值。
保持健康。
答案 0 :(得分:7)
您只有了解Diff1
和Diff2
的值,才能找到足够的信息来查找A,B或C中的任何一个。
有256 ** 3个不同的可能输入,只有256 ** 2个可能的输出,因此对于每个输出,有256个不同的可能输入可以给出该输出 - 其中A,B和C可以是任何值。但是一旦你知道其中任何一个,你就可以计算另外两个。
有效地,您在明文(B)上使用XOR加密两次,使用两个单独的未知密钥(A和C)。 XOR加密绝对不可能反转 - 输出中根本没有有用的信息(假设密钥是随机均匀选择的,永远不会重复使用)。
您可以找到A XOR C
:
Diff1 ^ Diff2