XOR encryption/decryption 当密钥超过一个字节长时?
XOR encryption/decryption when the key is more than one byte long?
假设使用字符'b'作为异或加密的密钥。在那种情况下,通过 'b' 的 ascii 代码对文本的每个字节(字符)进行异或运算来加密纯文本。反之,密文再用'b's ascii码异或得到明文。这个就明白了。
但是,当密钥(密码)是一串字符时,究竟如何加密呢?假设加密密码为'adg'。在那种情况下,明文是否通过 XOR-ing 的每个字节与 XOR d XOR g 的值加密?如果没有,那怎么办?
一种方法是重复key覆盖明文
例如密钥 = RTTI,明文 = "how exactly does one"
Text: how exactly does one
Key: RTTIRTTIRTTIRTTIRTTI
明文中的每个字符都将与其下方对应的关键字符进行异或。
实现方法有很多种"XOR encryption",所以如果您要解码一些现有数据,您首先需要弄清楚它是用哪种加密的。
我见过的最常见的方案,基本和经典方案一样Vigenère cipher;例如对于three-byte密钥abc
,明文的第一个字节与a
异或,第二个字节与b
异或,第三个字节与c
异或;第四个字节再次与 a
异或,第五个字节与 b
异或,依此类推,如下所示:
Plaintext: THIS IS SOME SECRET TEXT...
Key: abcabcabcabcabcabcabcabcabc
--------------------------------------
XOR: 5**2B*2B0./&A1&"0&5B7$:7OLM
识别这种 repeating-key 密码(并找出密钥长度)的一种方法是计算字节对 N[=37= 之间的 index of coincidence ] 在密文中分开的位置。如果密钥长度为 L,则将重合指数绘制为 N 的函数应该会显示 N 处的规则峰值阵列=32=]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
如果你的密文足够多,并且能猜出明文中最常见的字节,它甚至会为你吐出密钥。
假设使用字符'b'作为异或加密的密钥。在那种情况下,通过 'b' 的 ascii 代码对文本的每个字节(字符)进行异或运算来加密纯文本。反之,密文再用'b's ascii码异或得到明文。这个就明白了。
但是,当密钥(密码)是一串字符时,究竟如何加密呢?假设加密密码为'adg'。在那种情况下,明文是否通过 XOR-ing 的每个字节与 XOR d XOR g 的值加密?如果没有,那怎么办?
一种方法是重复key覆盖明文
例如密钥 = RTTI,明文 = "how exactly does one"
Text: how exactly does one
Key: RTTIRTTIRTTIRTTIRTTI
明文中的每个字符都将与其下方对应的关键字符进行异或。
实现方法有很多种"XOR encryption",所以如果您要解码一些现有数据,您首先需要弄清楚它是用哪种加密的。
我见过的最常见的方案,基本和经典方案一样Vigenère cipher;例如对于three-byte密钥abc
,明文的第一个字节与a
异或,第二个字节与b
异或,第三个字节与c
异或;第四个字节再次与 a
异或,第五个字节与 b
异或,依此类推,如下所示:
Plaintext: THIS IS SOME SECRET TEXT...
Key: abcabcabcabcabcabcabcabcabc
--------------------------------------
XOR: 5**2B*2B0./&A1&"0&5B7$:7OLM
识别这种 repeating-key 密码(并找出密钥长度)的一种方法是计算字节对 N[=37= 之间的 index of coincidence ] 在密文中分开的位置。如果密钥长度为 L,则将重合指数绘制为 N 的函数应该会显示 N 处的规则峰值阵列=32=]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
如果你的密文足够多,并且能猜出明文中最常见的字节,它甚至会为你吐出密钥。