【问题标题】:Is this PHP snippet equivalent to the C# snippet?这个 PHP 片段是否等同于 C# 片段?
【发布时间】:2021-08-27 18:42:15
【问题描述】:

我们得到了this C# snippet,它会生成一些用于 Rest API 调用的字符串。

我们必须在 PHP 中实现它。客户端也给我们提供了一个PHP sn-p,但是PHP返回的字符串和C#返回的字符串不同。你能说出什么是错的吗?我需要 PHP sn-p 提供与 C# 相同的输出。

这是PHP snippet

这里的函数我也分享一下,你可能会更容易阅读

C#

public static string CalculateDigest(string publicKey, string privateKey, string message)
{
    var digest = "";
    var hash = new System.Security.Cryptography.HMACSHA256(System.Text.Encoding.UTF8.GetBytes(privateKey));
    var correctHash = string.Join(string.Empty, hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(message)).Select(b => b.ToString("x2")));
    digest = publicKey + ":" + correctHash;
    return digest;
}

PHP

$digest = $PUBLIC_KEY.":".Hash_hmac("sha256", $message, $PRIVATE_KEY);

【问题讨论】:

  • (注意使用,string.Concat(...) 而不是string.Join(string.Empty, ...))

标签: c# php cryptography sha256 hmac


【解决方案1】:
<?php
$PUBLIC_KEY = "1";
$message = "2";
$PRIVATE_KEY = "3";
$digest = $PUBLIC_KEY.":".hash_hmac("sha256", $message, $PRIVATE_KEY);
echo $digest;
?>

还有,

public static void Main()
{
    Console.WriteLine(CalculateDigest("1", "3", "2"));
}


public static string CalculateDigest(string publicKey, string privateKey, string message)
{
    var digest = "";
    var hash = new System.Security.Cryptography.HMACSHA256(System.Text.Encoding.UTF8.GetBytes(privateKey));
    var correctHash = string.Join(string.Empty, hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(message)).Select(b => b.ToString("x2")));
    digest = publicKey + ":" + correctHash;
    return digest;
}

这两段代码给出相同的输出。(即1:b7648703c8f81cdc99f58e9f0214874fdaeedec81d83492799537fd0231b70d4)

看你提供的sn-ps,有些数据不一样。 (即 executeInitialPaymentNow 变量在 php sn-p 中为 true,在 C# one 中为 false)。请确保您提供给散列函数的最终字符串是相同的。

C# sn-p 中的消息变量:

客户-746508130245354364190340483PSW2017-11-28 10:15:350ZfalsePSWtestfalse2017-11-28 10:15:350Z2017-12-04 10:15:350Ztrue1

PHP sn-p 中的消息变量:

客户-746508130245354364190340483PSW2017-11-28 10:15:350ZtruePSW360VUZCatQATVodafonetrue2017-11-28 10:15:350Z2017-12-04 10:15:350Ztrue1true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2012-12-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    相关资源
    最近更新 更多