我熟悉python,对C#还是很新。

我正在尝试将python代码转换为C#代码,但效果不佳

这是我的python代码的一部分:

def make_signature(uri, access_key):
    secret_key = "****"     # secret key (from portal or sub account)
    secret_key = bytes(secret_key, 'UTF-8')
    method = "POST"
    message = method + " " + uri + "\n" + timestamp + "\n" + access_key
    message = bytes(message, 'UTF-8')
    signingKey = base64.b64encode(hmac.new(secret_key, message, digestmod=hashlib.sha256).digest())


我试图通过此C#代码将其转换:

            using (HMACSHA256 sha = new HMACSHA256(hmac_key))
            {
                var bytes = Encoding.UTF8.GetBytes(messageRaw);
                string base64 = Convert.ToBase64String(bytes);
                var message = Encoding.UTF8.GetBytes(base64);

                // encode
                var hash = sha.ComputeHash(message);

                // base64 convert
                return Convert.ToBase64String(hash);
            }


我发现这两个代码尽管输入相同,但它们的输出却不同。

谁能让我知道如何正确转换它?

最佳答案

要转换为Base64,可以使用以下命令:

    public static string Base64Encode(string plainText)
    {
        var plainTextBytes = System.Text.Encoding.ASCII.GetBytes(plainText);
        return System.Convert.ToBase64String(plainTextBytes);
    }


并转换回来!

    public static string Base64Decode(string base64EncodedData)
    {
        var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
        return System.Text.Encoding.ASCII.GetString(base64EncodedBytes);
    }


我在此示例中使用RichTextBox

richTextBox1.Text = Base64Encode(richTextBox1.Text);,转换为Base64

richTextBox1.Text = Base64Decode(richTextBox1.Text);,从Base64转换

您可以将ASCII Encoding更改为UTF-8或Visual Studio提供的任何Encoding :)

您不一定必须使用public static string,您只需将代码取出并放入按钮或MenuStrip Items

现在,在您提出问题之前,这里:

    public static string Base64Encode(string plainText)
    {
        var plainTextBytes = System.Text.Encoding.ASCII.GetBytes(plainText);

        var 1base64 = System.Convert.ToBase64String(plainTextBytes);

        var 2base64 = System.Text.Encoding.ASCII.GetBytes(1base64);

        return System.Convert.ToBase64String(2base64); //This is the double encryption :)
    }


我希望这可以帮助你 :)

关于c# - 在将python代码转换为C#的过程中,hmacsha编码成为问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58498205/

10-11 22:32
查看更多