我熟悉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);
,转换为Base64richTextBox1.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/