-1

认为:

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 是不可逆的,除非您知道密钥,但请注意 unsigned __int8 是 0...255 最大 256 个不同的值。

保持良好。

4

1 回答 1

7

Diff1仅知道 和 的值,您没有足够的信息来找到 A、B 或 C 中的任何一个Diff2

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

实际上,您使用两个单独的未知密钥(A 和 C)对纯文本(B)使用 XOR 加密两次。XOR 加密被证明是不可能逆转的——输出中根本没有有用的信息(假设密钥是随机均匀选择的并且从未重复使用)。

你可以找到A XOR C

Diff1 ^ Diff2
于 2010-05-28T18:41:27.793 回答