-1

我一直在尝试将 C# 加密技术转换为 PHP。C# 代码如下所示。我没有 C# 的经验。我不得不接管 C# 中的项目

private void button1_Click(object sender, EventArgs e)
{
    //byte[] response = ComputeHash("pradeep14520", BitConverter.GetBytes("0x9A111B734E4F10469668"));
    //byte[] response = ComputeHash("pradeep14520", dictionary.ElementAt(0).Value.Salt);
    byte[] response =ComputeHash("pradeep14520", StringToByteArray("9A111B734E4F10469668"));
    string hex = BitConverter.ToString(response).Replace("-", string.Empty);
    string base64 = Convert.ToBase64String(response); // 683CA8E00E8CE41A079B7C86CE4960AC2376CD85F2AEAB2E4DF99FFA7F7FA4F3
}

 private byte[] ComputeHash(string password, byte[] storedSalt)
    {
        byte[] passwordBytes = Encoding.Unicode.GetBytes(password);
        if ((int)storedSalt.Length > 0)
        {
            byte[] passwordAndSalt = new byte[(int)passwordBytes.Length + (int)storedSalt.Length];
            passwordBytes.CopyTo(passwordAndSalt, 0);
            storedSalt.CopyTo(passwordAndSalt, (int)passwordBytes.Length);
            passwordBytes = passwordAndSalt;
        }

        return new SHA256Managed().ComputeHash(passwordBytes);
    }

我已经在按钮单击功能中评论了示例响应。我尝试使用 PHP 实现相同的功能。参考此链接后使用以下代码

.我发现没有必要在 PHP 中生成字节数组,因为字符串是 php 中的字节数组。

$originalSalt = 'pradeep14520';
    $originalSalt .= '9A111B734E4F10469668';
    hash("sha256",iconv(mb_detect_encoding($originalSalt, mb_detect_order(), false), "UTF-8", $originalSalt),true);

我已将最后一个参数作为 false 传递给哈希函数,以获得原始输出。但是我得到了不同的 PHP 和 C# 输出

for PHP :afc80d1a6cae81e8f868b054dafbb74bdd86399d771fceef574e4b373506b704
for C#  :683CA8E00E8CE41A079B7C86CE4960AC2376CD85F2AEAB2E4DF99FFA7F7FA4F3

请帮忙。提前致谢。

根据 Daniel Hilgarth 提供的建议,我修改了代码并使其工作。

   $password = 'pradeep14520';
$originalSalt = hex2bin('9A111B734E4F10469668');
echo    strtoupper(hash("sha256",mb_convert_encoding($password,"UTF-16LE").$originalSalt,false));

我希望它会帮助某人..

4

1 回答 1

1

这里的问题是 C# 代码使用Encoding.Unicode. 这是 UTF-16,即每个字符返回两个字节,即使该字符可以用 ASCII 表示。

您需要在 PHP 中使用它的等效项,或者将 C# 代码更改为使用Encoding.UTF8Encoding.ASCII,具体取决于 PHP 字符串的真正含义。

于 2013-04-16T11:47:23.813 回答