San*_*nen 13
首先,您需要找出密码的长度.您可以通过评估重合指数或Kappa检验来做到这一点.XOR密文本身移位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%
Run Code Online (Sandbox Code Playgroud)
如您所见,Kappa值在4(4,8和12)的倍数上明显高于其他值.这表明密码的长度为4.
既然您有密码长度,您应该再次对密码文本进行异或,但现在您将移动长度的倍数.为什么?由于密文看起来像这样:
THISISTHEPLAINTEXT <- Plaintext
PASSPASSPASSPASSPA <- Password
------------------
EJKELDOSOSKDOWQLAG <- Ciphertext
Run Code Online (Sandbox Code Playgroud)
当两个相同的值是XOR:ed时,结果为0:
EJKELDOSOSKDOWQLAG <- Ciphertext
EJKELDOSOSKDOWQLAG <- Ciphertext shifted 4.
Run Code Online (Sandbox Code Playgroud)
实际上是:
THISISTHEPLAINTEXT <- Plaintext
PASSPASSPASSPASSPA <- Password
THISISTHEPLAINTEXT <- Plaintext
PASSPASSPASSPASSPA <- Password
Run Code Online (Sandbox Code Playgroud)
这是:
THISISTHEPLAINTEXT <- Plaintext
THISISTHEPLAINTEXT <- Plaintext
Run Code Online (Sandbox Code Playgroud)
当您看到密码"消失"并且明文是XOR:ed时自己.
那么我们现在可以做些什么呢?你写道,空格被删除了.这使得获取明文或密码更加困难.但根本不可能.
下表显示了所有英文字符的密文值:
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
Run Code Online (Sandbox Code Playgroud)
这意味着什么呢?如果A和B是XOR:ed,那么结果值是3.E和P将导致21.等等.但是这对你有什么帮助?
请记住,明文是XOR:ed,其自身移动了密码长度的倍数.对于每个值,您可以检查上表并确定该位置可能具有的组合.假设值为25,则导致值25的两个字符可以是以下组合之一:(IP),(HQ),(KR),(JS),(MT),(LU),(OV) ),(NW),(AX)或(CZ).但是哪一个?现在,您可以执行更多移位,并在每个位置再次查找表中的相应值.下次该值可能为7,并且由于您已经有可能的字符组合列表,因此您只需检查它们.在接下来的两个班次中,值为3和1.现在您可以确定该字符是W,因为这是每个班次中唯一的共同字符,(NW),(PW),(TW),(VW).你可以为大多数职位做到这一点.
您将无法获得所有明文,但您将获得足够的字符来发现密码.获取已知字符并将它们XOR放在密文中的正确位置.这将产生密码.至少您需要的已知字符数是密码中的字符数,如果它们位于密码的"正确"位置.
祝好运!