假设字符“b”用作XOR加密的密钥。在这种情况下,加密纯文本是通过用'b'的ascii代码对文本的每个字节(字符)进行异或来完成的。相反,纯文本可以通过再次通过'b'ascii代码进行异或来从加密文本中获得。这是理解的。
但是,当密钥(密码)是一串字符时,如何加密?假设加密密码是'adg'。在这种情况下,纯文本是通过对其每个字节进行异或来加密的,其值为XOR d XOR g?如果没有,那怎么样?
答案 0 :(得分:4)
一种方法是重复密钥以覆盖纯文本。
e.g。 key = RTTI,plaintext ="一个"
究竟是怎样的Text: how exactly does one
Key: RTTIRTTIRTTIRTTIRTTI
纯文本中的每个字符都是异或,并在其下方有相应的关键字。
答案 1 :(得分:3)
有许多方法可以实现" XOR加密",因此,如果您尝试解码某些现有数据,您首先需要确定它是哪种类型的?用。加密。
我见过的最常见的方案基本上类似于经典Vigenère cipher;例如对于三字节密钥abc
,明文的第一个字节与a
进行异或,第二个为b
,第三个为c
;然后,第四个字节再次与a
进行异或,第五个字节与b
进行异或,依此类推:
Plaintext: THIS IS SOME SECRET TEXT...
Key: abcabcabcabcabcabcabcabcabc
--------------------------------------
XOR: 5**2B*2B0./&A1&"0&5B7$:7OLM
识别这种重复密钥密码(并且还找出密钥长度)的一种方法是计算密文中分开的字节对 N 之间的index of coincidence。如果密钥长度为 L ,则将重合索引作为 N 的函数绘制,应在 N 可以被 L 整除。 (当然,这只有在明文类似于普通文本或具有偏向字节频率分布的代码时才有效;如果它是完全随机的数据,那么这不会有帮助。)
或者你可以使用hellman的xortool,这将为你自动完成所有这些。例如,在上面的密文5**2B*2B0./&A1&"0&5B7$:7OLM
上运行它,它说:
The most probable key lengths: 1: 17.3% 3: 40.7% 6: 21.5% 8: 6.5% 12: 5.4% 15: 4.6% 18: 4.0% Key-length can be 3*n
如果你有足够的密文,可以猜出明文中最常见的字节,它甚至会为你吐出密钥。