【问题标题】:XOR encryption/decryption when the key is more than one byte long?密钥长度超过一个字节时的 XOR 加密/解密?
【发布时间】:2016-01-16 11:26:41
【问题描述】:

假设字符“b”用作异或加密的密钥。在这种情况下,加密纯文本是通过用 'b' 的 ascii 代码对文本的每个字节(字符)进行异或运算来完成的。相反,可以通过再次与'b'的ASCII码进行异或,从密文中获得明文。这是可以理解的。

但是,当密钥(密码)是一串字符时,如何加密呢?假设加密密码是“adg”。在这种情况下,明文是否通过 XOR 将其每个字节与 XOR d XOR g 的值进行异或加密?如果没有,那怎么办?

【问题讨论】:

  • 这取决于您想要执行哪种“XOR 加密”。您是在尝试解码一些现有数据,还是只是在推出自己的混淆方案(因此可以按照您想要的方式进行操作)?
  • 我正在尝试解码一些现有数据,是的。我不知道不同种类的 XOR 加密,但我知道这个特定的问题应该使用这种加密中最基本的。

标签: encryption xor


【解决方案1】:

一种方法是重复键覆盖纯文本。

例如key = RTTI, plaintext = "具体怎么做"

Text: how exactly does one
Key:  RTTIRTTIRTTIRTTIRTTI

纯文本中的每个字符都将与下面的相应关键字符进行异或。

【讨论】:

  • 谢谢!这是有道理的,尽管它使我的任务更加困难。 :)
【解决方案2】:

有很多方法可以实现“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上运行,它会说:

最可能的密钥长度: 1:17.3% 3:40.7% 6:21.5% 8:6.5% 12:5.4% 15:4.6% 18:4.0% 密钥长度可以是 3*n

如果你有足够的密文,并且能猜出明文中最常见的字节,它甚至会为你吐出密钥。

【讨论】:

    猜你喜欢
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2010-11-05
    • 2011-09-03
    • 2012-05-31
    • 2015-06-22
    • 2012-02-03
    相关资源
    最近更新 更多