我们总结XOR字符串加密比众所周知的加密安全性更低(Say Blowfish)

Che*_*eng 3 c++ encryption

我想知道,结论是否公平,XOR字符串加密不如其他加密方法安全,Blowfish

这是因为对于这两种方法,他们的输入都是

  1. 未加密的字符串
  2. 一把密钥

string XOR(string value,string key)
{
    string retval(value);

    short unsigned int klen=key.length();
    short unsigned int vlen=value.length();
    short unsigned int k=0;
    short unsigned int v=0;

    for(v;v<vlen;v++)
    {
        retval[v]=value[v]^key[k];
        k=(++k<klen?k:0);
    }

    return retval;
}
Run Code Online (Sandbox Code Playgroud)

有没有证据表明如果选择相同的密钥,XOR加密方法比Blowfish更容易被"破坏" ?

Luk*_*keH 9

如果您的密钥是(a)真正随机,(b)至少与明文一样长,并且(c)永远不会重复使用,则XOR加密可证明是不可破解的.

如果你不能满足那些严格的标准,那么XOR加密比Blowfish等适当的加密算法要弱得多,尽管我不能自己证明这一点.


tem*_*def 5

如果您尝试使用多次编码相同的字符串,则XOR加密非常不安全,因为它允许恶意用户通过对其加密进行异或来恢复两个消息的XOR.如果他们可以以某种方式诱骗您对已知字符串进行异或,那么他们可以恢复您的密钥并完全破坏加密.

更高级的加密算法(如Blowfish和AES)具有更强大的安全保障,并且假设它们非常强大,即使攻击者允许您加密已知数据,它们也无法恢复您的密钥或恢复任何单个位.在安全性很重要的任何情况下,应始终使用它们而不是自己的自定义加密.

有趣的是,XOR加密在每次调用时使用新的(随机选择的)密钥,从信息理论的角度来看,它在密码学上是不可破解的.这被称为"一次性垫",理论上可以在某些设置中使用.


eta*_*ion 5

事实上,"XOR加密"被证明是非常安全的防止窃听(当有人可以改变你的流时你仍然有问题),给定一个加密密钥是

  • 只要要加密的字符串
  • 完全随机(比特是不相关的,具有相同的概率为1和0)
  • 仅使用一次.

否则,你陷入了困境.如果您的位不是随机的,您可以提取有关明文位的一些信息.如果你重复使用你的密钥,你可以对两个密文进行异或,以获得明文的异或,或者,如果有人让你发布一条他知道的明文的消息,他就可以提取密钥(他们实际上是为ENIGMA做的在二战中,这不是不现实的!).如果密钥短于消息,则可以使用统计信息 - 比如它们的密钥长度为10个字节,您可以将密文分成10个部分,这些部分都使用相同的字节进行编码,并使用频率分析...只是为了命名几次袭击.