假设:
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个不同的值.
保持良好.
您没有足够的信息来从刚刚知道的值找到任何A,B或C的Diff1
和Diff2
.
有256**3个不同的可能输入,只有256**2个可能的输出,因此对于每个输出,有256个不同的可能输入可以给出该输出 - 其中A,B和C可以是任何值.但是一旦你知道其中任何一个,你就可以计算另外两个.
实际上,您在明文(B)上使用XOR加密两次,并使用两个单独的未知密钥(A和C).异步加密是不可能反转的 - 输出中根本没有有用的信息(假设密钥是随机均匀选择的,永远不会重复使用).
你可以找到A XOR C
:
Diff1 ^ Diff2
Run Code Online (Sandbox Code Playgroud)