Bruteforce XOR密码

时间:2013-07-17 07:16:53

标签: c++ cryptography xor encryption cracking

是否可以强制使用标准的XOR密码?

知道这个:

  

*#(I @ KI

使用XOR函数进行编码

//
std::string CStringCoding::Xor( const std::string& strIn )
{
    std::string sOut = "";

    for(std::size_t loop = 0; loop < strIn.size(); loop++)
    {
        unsigned int iCharacter = static_cast<unsigned int>(strIn[loop] ^ sKey[loop % sKey.size()]);
        sOut += iCharacter;
    }

    return sOut;
}

我可以用经典的词表方法来强制执行吗?

我在考虑:

  

生成Wordlist KEY

     

XOR * #(I @ KI 使用KEY来解密它并获得STRING

     

使用KEY密钥对STRING进行异或处理

     

将新的CIPHERED STRING与INPUT CIPHERED STRING进行比较

     

如果匹配,则找到KEY

我没有测试它,只是在我采取行动之前询问并花太多时间做一些无效的事情。

感谢。

2 个答案:

答案 0 :(得分:3)

假设您正在加密有意义的人类可读文本,如果攻击者有以下内容,则可能会破坏此XOR cipher

  1. 使用密钥重用编码的密文(例如loop%sKey.size())
  2. 使用相同密钥编码的2个密文
  3. Frequency analysis可以打破这两种情况。

    但是,使用与消息长度相同的真正随机密钥对xor明文进行处理是很好的。它将是牢不可破的密码:One-Time Pad

      

    OTP即使对暴力攻击也是免疫的。只需简单地按下所有键   产生所有明文,同样可能是实际的明文

答案 1 :(得分:2)

“XOR密码”是什么意思?正如@varren所说,One Time Pad是牢不可破的。但是,实际使用的大多数XOR密码不是OTP,而是Stream Ciphers,例如RC4。那些密码是易碎的,因为密钥(通常)比消息短,密钥流不是真随机的,而是伪随机的。流密码可能会受到强力攻击,因为它们不符合One Time Pad的要求。