簡體   English   中英

如何像在 PHP 示例中一樣在 C# 中創建 hash ?

[英]How to create hash in C# like in PHP example?

我必須將此 php 代碼重寫為 c#

$sign_params = ['name'=>"John", 'age'=>18];
$client_secret = 'test secret key';
ksort($sign_params); // Sort array by keys
$sign_params_query = http_build_query($sign_params); // Forming string like "param_name1=value&param_name2=value"
$sign = rtrim(strtr(base64_encode(hash_hmac('sha256', $sign_params_query, $client_secret, true)), '+/', '-_'), '='); // get hash code
return $sign;

這是我嘗試的:

    public class apiHelper : MonoBehaviour
{
    const string client_secret = "test secret key";
    public static string checkSign(Dictionary<string, dynamic> fields)
    {
        //* sort by keys
        var list = fields.Keys.ToList();
        list.Sort();
        string sign_params_query = "";
        //* forming string like "param_name1=value&param_name2=value"
        foreach (var key in list)
        {
            sign_params_query = sign_params_query + key + "=" + fields[key];
            if (key != list.Last()) sign_params_query = sign_params_query + "&";
        }
        //* get hash code
        string sign = System.Convert.ToBase64String(GetHash(sign_params_query, client_secret));
        char[] charsToTrim = { '=' };
        return sign.Replace("+", "-").TrimEnd(charsToTrim);
    }
    static byte[] GetHash(string url, string key)
    {
        using (HMACSHA256 hmac = new HMACSHA256(Encoding.ASCII.GetBytes(key)))
        {
            byte[] data = hmac.ComputeHash(Encoding.UTF8.GetBytes(url));
            return data;
        }
    }

}

好吧,最后我得到的 hash 與 php 示例不同。 我做錯了什么? 這是我第一次使用加密或類似的東西

好吧,帶有特殊字符的字符串的問題。 我必須使用等效的 url_encode c# 來解決它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM