我想知道是否有人知道更快的XOR字符串方式。
我当前的DoXor()
函数如下所示:
private string DoXor(byte[] s, string key)
{
string outText = "";
for(int i = 0; i<s.Length;)
{
for(int j = 0; (j<key.Length && i<s.Length); j++, i++)
{
outText += (char) (s[i] ^ key.ToCharArray()[j]);
Console.WriteLine(j);
}
}
return outText;
}
并且它是无法缓慢的(超过2分钟)。为了比较,我从我的网站上的PHP脚本接收数据,并使用函数
在<0.2秒内管理XOR。function doXor($string, $key = "magic_key") {
// Our plaintext/ciphertext
$text = $string;
// Our output text
$outText = '';
// Iterate through each character
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
}
}
return $outText;
}
我正在解密PHP脚本中的一些数据,由base64_encode(doXor(base64_encode($data), $key))
加密,$data
是磁盘上DLL文件的内容,$key
是MD5哈希的前8个字符
我正在XORing的数据大小约为2.5MB