因此,我必须解密使用.txt
加密的XOR code
文件,并使用未知的重复密码,目标是发现该消息。
以下是因为教授而我已经知道的事情:
首先,我需要找到未知密码的长度
邮件已更改且没有空格(这可能会增加一点难度,因为空格字符在邮件中的频率最高)
关于如何解决这个问题的任何想法?
thx in advanced:)
答案 0 :(得分:13)
首先,您需要找出密码的长度。您可以通过评估Index of Coincidence或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%
如您所见,Kappa值在4(4,8和12)的倍数上显着高于其他值。这表明密码的长度为4。
既然你有密码长度,你应该再次对密码文本进行异或,但现在你要移动长度的倍数。为什么?由于密文看起来像这样:
THISISTHEPLAINTEXT <- Plaintext
PASSPASSPASSPASSPA <- Password
------------------
EJKELDOSOSKDOWQLAG <- Ciphertext
当两个相同的值为XOR:ed时,结果为0:
EJKELDOSOSKDOWQLAG <- Ciphertext
EJKELDOSOSKDOWQLAG <- Ciphertext shifted 4.
实际上是:
THISISTHEPLAINTEXT <- Plaintext
PASSPASSPASSPASSPA <- Password
THISISTHEPLAINTEXT <- Plaintext
PASSPASSPASSPASSPA <- Password
这是:
THISISTHEPLAINTEXT <- Plaintext
THISISTHEPLAINTEXT <- Plaintext
当你看到密码“消失”而明文是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
这意味着什么?如果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,因为这是每个班次中唯一的共同字符,(N-W),(P-W),(T-W),(V-W)。你可以为大多数职位做到这一点。
您将无法获得所有明文,但您将获得足够的字符来发现密码。获取已知字符并将它们XOR放在密文中的正确位置。这将产生密码。至少您需要的已知字符数是密码中的字符数,如果它们位于密码的“正确”位置。
祝你好运!答案 1 :(得分:1)
你应该看看破解vigenere chiffre,特别是在自动关联时。后者将帮助您找出密码的长度,其余的通常只是强制正常的字母分布(最常见的是英文字母e)。
答案 2 :(得分:1)
虽然空格是最常见的字符并且使这样的解密变得容易,但另一个字符也具有不同的频率。例如,see this Wikipedia article。如果您有足够的加密文本并且密码长度不是太大,那么可能只需要找出加密文本中最常见的字节。它们很可能是e
的加密版本,其在英文文本中的频率最高。
仅此一项不会为您提供解密文本,但您很可能会找到密码长度和密码本身(部分)。例如,假设最频繁的加密字节是
w x m z y
频率几乎相同,并且在最后一次频率之后频率显着下降。这将告诉你两件事:
e
都具有相同的可能性。编辑:好的,这是不正确的,它将是 5或以上,因为密码可以多次包含相同的字符。w x m z y
XOR e e e e e
)的一些排列 - 您可以使用以密码长度为模的字节偏移量来获得正确的排列。编辑:密码中出现的相同字符多次使事情变得更难,但您很可能能够识别这些字符,因为正如我所说,e
的加密版本会聚集在频率{{{ 1}} - 现在,如果字符出现f
次,则其频率将接近n
。
答案 3 :(得分:0)
英语中最常见的三字母trigram(假设语言可能是英语)是“the”。将“the”放在密文的所有可能位置,以获得密钥的可能3个字符。在密文上的所有其他可能位置尝试每个可能的密钥片段,看看你得到了什么。例如,“qzg”不太可能是正确的,但“fen”可能是正确的。查看可能位置之间的间距以得出密钥长度。使用密钥长度和密钥片段,您可以放置更多密钥。
正如Lars所说,看看解密Vigenère的方法,这实际上就是你所拥有的。