【问题标题】:Xor function in PHP that corresponds to the one in C#PHP中的Xor函数对应于C#中的Xor函数
【发布时间】:2020-01-17 04:16:06
【问题描述】:

我需要在 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());
   }

现在我已经尝试使用我在 Stackoverflow (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 输出:«¡©§

【问题讨论】:

  • 您能否提供一个用于测试的示例输入以及您期望的输出(不是每个人都可以使用 C#)。
  • 我不是 PHP 专家,但你为什么要遍历 strlen$key
  • @NigelRen 但是每个人(至少如果你在这个网站上)都可以访问互联网:dotnetfiddle.net 所以你可以运行它
  • @MindSwipe,作为提出任何问题的一部分——您应该提供MCVE,这意味着包括有关您使用什么作为输入以及您期望什么作为输出的相关信息——以及哪里错了。
  • 我已经在 PHP 和 C# 中添加了输入和输出作为 OP 的编辑。

标签: c# php xor


【解决方案1】:

由于某种原因,您正在迭代 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;
}

this SO 的帮助下回答。如另一个答案所示,这可以更简洁地完成:

function xor_this($string)
{
    $key = (200);
    for($i = 0; $i < strlen($string); $i++) 
            $string[$i] = chr(ord($string[$i]) ^ $key);

    return $string;
}

【讨论】:

  • 非常感谢!这帮助我解决了我的问题
猜你喜欢
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
  • 2013-08-13
  • 2021-08-31
  • 2016-09-29
  • 2016-07-08
  • 1970-01-01
  • 2013-09-04
相关资源
最近更新 更多