PHP 中的 Xor 函数对应于 C# 中的函数
Xor function in PHP that corresponds to the one in C#
我需要在 PHP 中编写一个函数,输出与下面 C# 中的结果相同的结果。
C#
public void Criptami()
{
szEncryptionKey = 200;
szPlainText = input.text;
StringBuilder szInputStringBuild = new StringBuilder(szPlainText);
StringBuilder szOutStringBuild = new StringBuilder(szPlainText.Length);
char Textch;
for (int iCount = 0; iCount < szPlainText.Length; iCount++)
{
Textch = szInputStringBuild[iCount];
Textch = (char)(Textch ^ szEncryptionKey);
szOutStringBuild.Append(Textch);
}
Debug.Log(szOutStringBuild.ToString());
}
现在我尝试使用我在 Whosebug (Encrypt/decrypt with XOR in PHP) 上的另一个讨论中找到的函数,但是输入相同,最终输出不同。
function xor_this($string) {
// Let's define our key here
$key = (200);
// 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;
}
我得到了一段 C# 代码,但就我所能收集到的信息而言 - 尽管我对 C# 的了解几乎不存在 - 在我看来它应该以完全相同的方式运行?
非常感谢您的宝贵时间!
编辑:我添加了输入和输出值
PHP
输入:ciao
输出:QYQ]
C#
输入:ciao
输出:«¡©§
出于某种原因,您正在遍历 strlen($key)
。我猜你不想那样做。这是我的 PHP 无能的自己设法做到的:
function xor_this($string) {
// Let's define our key here
$key = (200);
// Our plaintext/ciphertext
$text = $string;
// Our output text
$outText = '';
// Iterate through each character
for($i=0; $i<strlen($text); $i++)
{
$char = substr($text, $i, 1);
$char = chr(ord($char) ^ $key);
$outText .= $char;
}
return $outText;
}
在 的帮助下回答。正如另一个答案所示,这可以更简洁地完成:
function xor_this($string)
{
$key = (200);
for($i = 0; $i < strlen($string); $i++)
$string[$i] = chr(ord($string[$i]) ^ $key);
return $string;
}
我需要在 PHP 中编写一个函数,输出与下面 C# 中的结果相同的结果。
C#
public void Criptami()
{
szEncryptionKey = 200;
szPlainText = input.text;
StringBuilder szInputStringBuild = new StringBuilder(szPlainText);
StringBuilder szOutStringBuild = new StringBuilder(szPlainText.Length);
char Textch;
for (int iCount = 0; iCount < szPlainText.Length; iCount++)
{
Textch = szInputStringBuild[iCount];
Textch = (char)(Textch ^ szEncryptionKey);
szOutStringBuild.Append(Textch);
}
Debug.Log(szOutStringBuild.ToString());
}
现在我尝试使用我在 Whosebug (Encrypt/decrypt with XOR in PHP) 上的另一个讨论中找到的函数,但是输入相同,最终输出不同。
function xor_this($string) {
// Let's define our key here
$key = (200);
// 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;
}
我得到了一段 C# 代码,但就我所能收集到的信息而言 - 尽管我对 C# 的了解几乎不存在 - 在我看来它应该以完全相同的方式运行?
非常感谢您的宝贵时间!
编辑:我添加了输入和输出值
PHP 输入:ciao 输出:QYQ]
C# 输入:ciao 输出:«¡©§
出于某种原因,您正在遍历 strlen($key)
。我猜你不想那样做。这是我的 PHP 无能的自己设法做到的:
function xor_this($string) {
// Let's define our key here
$key = (200);
// Our plaintext/ciphertext
$text = $string;
// Our output text
$outText = '';
// Iterate through each character
for($i=0; $i<strlen($text); $i++)
{
$char = substr($text, $i, 1);
$char = chr(ord($char) ^ $key);
$outText .= $char;
}
return $outText;
}
在
function xor_this($string)
{
$key = (200);
for($i = 0; $i < strlen($string); $i++)
$string[$i] = chr(ord($string[$i]) ^ $key);
return $string;
}