异或文件解密

因此,我必须解密使用XOR代码加密的.txt文件,并使用未知的重复密码,目标是发现消息.

以下是因为教授我已经知道的事情:

>首先,我需要找到未知密码的长度
>消息已被更改,并且没有空格(这可能会增加一点难度,因为空格字符在消息中的频率最高)

关于如何解决这个问题的任何想法?

thx在高级:)

首先,您需要找出密码的长度.您可以通过评估 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放在密文中的正确位置.这将产生密码.至少您需要的已知字符数是密码中的字符数,如果它们位于密码的“正确”位置.

祝好运!

相关文章
相关标签/搜索