所以我必须解密 .txt
使用 XOR code
加密的文件并且使用未知的重复密码,目标是发现消息。
以下是由于教授而我已经知道的事情:
关于如何解决这个问题的任何想法?
thx 先进 :)
最佳答案
首先,您需要找出密码的长度。您可以通过评估 Index of Coincidence 来做到这一点。或 Kappa 测试。将密文与自身移动 1 步进行异或运算,并计算相同的字符数(值 0)。您可以通过将结果除以字符总数减 1 来获得 Kappa 值。再移动一次并再次计算 Kappa 值。根据需要多次移动密文,直到发现密码长度。如果长度为 4,您应该会看到类似以下内容:
Offset Hits
-------------------------
1 2.68695%
2 2.36399%
3 3.79009%
4 6.74012%
5 3.6953%
6 1.81582%
7 3.82744%
8 6.03504%
9 3.60273%
10 1.98052%
11 3.83241%
12 6.5627%
如您所见,Kappa 值在 4 的倍数(4、8 和 12)上明显高于其他值。这表明密码的长度为 4。
现在您有了密码长度,您应该再次将密文与自身进行异或运算,但现在您要移动长度的倍数。为什么?由于密文如下所示:
THISISTHEPLAINTEXT <- Plaintext
PASSPASSPASSPASSPA <- Password
------------------
EJKELDOSOSKDOWQLAG <- Ciphertext
当两个相同的值进行异或运算时,结果为 0:
EJKELDOSOSKDOWQLAG <- Ciphertext
EJKELDOSOSKDOWQLAG <- Ciphertext shifted 4.
现实中是:
THISISTHEPLAINTEXT <- Plaintext
PASSPASSPASSPASSPA <- Password
THISISTHEPLAINTEXT <- Plaintext
PASSPASSPASSPASSPA <- Password
这是:
THISISTHEPLAINTEXT <- Plaintext
THISISTHEPLAINTEXT <- Plaintext
如您所见,密码“消失”并且明文与自身进行了异或运算。
那么我们现在能做什么呢?您写道,空格已被删除。这使得获取明文或密码变得有点困难。但并非完全不可能。
下表显示了所有英文字符的密文值:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
A 0
B 3 0
C 2 1 0
D 5 6 7 0
E 4 7 6 1 0
F 7 4 5 2 3 0
G 6 5 4 3 2 1 0
H 9 10 11 12 13 14 15 0
I 8 11 10 13 12 15 14 1 0
J 11 8 9 14 15 12 13 2 3 0
K 10 9 8 15 14 13 12 3 2 1 0
L 13 14 15 8 9 10 11 4 5 6 7 0
M 12 15 14 9 8 11 10 5 4 7 6 1 0
N 15 12 13 10 11 8 9 6 7 4 5 2 3 0
O 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
P 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0
Q 16 19 18 21 20 23 22 25 24 27 26 29 28 31 30 1 0
R 19 16 17 22 23 20 21 26 27 24 25 30 31 28 29 2 3 0
S 18 17 16 23 22 21 20 27 26 25 24 31 30 29 28 3 2 1 0
T 21 22 23 16 17 18 19 28 29 30 31 24 25 26 27 4 5 6 7 0
U 20 23 22 17 16 19 18 29 28 31 30 25 24 27 26 5 4 7 6 1 0
V 23 20 21 18 19 16 17 30 31 28 29 26 27 24 25 6 7 4 5 2 3 0
W 22 21 20 19 18 17 16 31 30 29 28 27 26 25 24 7 6 5 4 3 2 1 0
X 25 26 27 28 29 30 31 16 17 18 19 20 21 22 23 8 9 10 11 12 13 14 15 0
Y 24 27 26 29 28 31 30 17 16 19 18 21 20 23 22 9 8 11 10 13 12 15 14 1 0
Z 27 24 25 30 31 28 29 18 19 16 17 22 23 20 21 10 11 8 9 14 15 12 13 2 3 0
那这是什么意思呢?如果 A 和 B 是 XOR:ed,则结果值为 3。E 和 P 将产生 21。等等。好的,但这对您有什么帮助?
请记住,明文是 XOR:ed,其自身移动了密码长度的倍数。对于每个值,您可以检查上表并确定该位置可能具有的组合。假设值为 25,那么导致值为 25 的两个字符可能是以下组合之一:(I-P)、(H-Q)、(K-R)、(J-S)、(M-T)、(L-U)、(O-V) )、(N-W)、(A-X) 或 (C-Z)。但是哪一个?现在您进行更多类次并再次在表中查找每个位置的相应值。下一次该值可能是 7,并且由于您已经有可能的字符组合列表,您只需检查它们。在接下来的两个类次中,值是 3 和 1。现在您可以确定字符是 W,因为这是每个类次中唯一常见的字符,(N-W)、(P-W)、(T-W)、(V-W)。您可以对大多数职位执行此操作。
你不会得到所有的明文,但你会得到足够的字符来发现密码。取已知字符并将它们异或到密文中的正确位置。这将产生密码。您至少需要的已知字符数是密码中的字符数,如果它们位于密码的“正确”位置。
祝你好运!
关于file - 异或文件解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7301725/