围绕我的XOR加密需要明文大小的方法

时间:2013-12-11 01:14:27

标签: php c++ encryption xor

我查看了一些XOR示例,但无法找到答案。

这是我用于PHP的代码:

 for($i=0;$i<strlen($text);)
 {
     for($j=0;($j<strlen($key) && $i<strlen($text));$j++,$i++)
     {
         $outText .= $text{$i} ^ $key{$j};
         //echo 'i='.$i.', '.'j='.$j.', '.$outText{$i}.'<br />'; //for debugging
     }
 }  

在C ++中生成的解密代码:

for (int i = 0; i < original.size();)
{
    for (int j = 0; (j < key.size() && i < original.size()); j++, i++)
    {
        decrypted += encrypted[i] ^ key[j];
    }
}

我无法满足明文大小的需求(在本例中为std :: string original)。

如果没有,希望彻底改变我的算法方式,有没有办法解决这个问题呢?

提前致谢!

1 个答案:

答案 0 :(得分:2)

密文和明文的长度相同。所以这两种尺寸都可以。

在PHP或C ++中,您也不需要两级循环嵌套。

您的代码应该更像这样:

 $textlen = strlen($text);
 $keylen  = strlen($key);
 for ($i = 0; $i < $textlen; $i++)
 {
     $outText .= chr( ord( $text{$i} ) ^ ord ( $key{$i % $keylen} ) );
 }  

我回答了关于XOR加密的另一个问题here,,因为这些日子似乎风靡一时。

顺便说一句,如果你试图将这个PHP代码反向回C ++,请注意(与PHP不同),strlen在ASCII NUL处停止,并且不会执行您想要的操作。对于C ++版本,最好使用std::stringvector<char>。 (请参阅上面的链接了解我的C ++代码。)