gpt4 book ai didi

c# - Python hmac 和 C# hmac

转载 作者:太空狗 更新时间:2023-10-30 01:45:02 26 4
gpt4 key购买 nike

我们有一个 python 网络服务。它需要一个散列作为参数。python中的hash就是这样生成的。

    hashed_data = hmac.new("ant", "bat", hashlib.sha1)
print hashed_data.hexdigest()

现在,这就是我从 C# 生成哈希的方式。

    ASCIIEncoding encoder = new ASCIIEncoding();
Byte[] code = encoder.GetBytes("ant");
HMACSHA1 hmSha1 = new HMACSHA1(code);
Byte[] hashMe = encoder.GetBytes("bat");
Byte[] hmBytes = hmSha1.ComputeHash(hashMe);
Console.WriteLine(Convert.ToBase64String(hmBytes));

但是,我得到了不同的结果。

我应该更改散列的顺序吗?

谢谢,

乔恩

最佳答案

为了打印结果:

  • 在 Python 中你使用:.hexdigest()
  • 在 C# 中,您使用:Convert.ToBase64String

这两个函数根本不做同样的事情。 Python 的 hexdigest 只是将字节数组转换为十六进制字符串,而 C# 方法使用 Base64 编码来转换字节数组。因此,要获得相同的输出,只需定义一个函数:

public static string ToHexString(byte[] array)
{
StringBuilder hex = new StringBuilder(array.Length * 2);
foreach (byte b in array)
{
hex.AppendFormat("{0:x2}", b);
}
return hex.ToString();
}

然后:

ASCIIEncoding encoder = new ASCIIEncoding();
Byte[] code = encoder.GetBytes("ant");
HMACSHA1 hmSha1 = new HMACSHA1(code);
Byte[] hashMe = encoder.GetBytes("bat");
Byte[] hmBytes = hmSha1.ComputeHash(hashMe);
Console.WriteLine(ToHexString(hmBytes));

现在您将获得与 Python 中相同的输出:

739ebc1e3600d5be6e9fa875bd0a572d6aee9266

关于c# - Python hmac 和 C# hmac,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11790599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com