首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python hmac和C# hmac

Python hmac和C# hmac
EN

Stack Overflow用户
提问于 2012-08-03 14:44:30
回答 1查看 3.9K关注 0票数 8

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

代码语言:javascript
复制
    hashed_data = hmac.new("ant", "bat", hashlib.sha1)
    print hashed_data.hexdigest()

现在,这就是我从C#生成散列的方法。

代码语言:javascript
复制
    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));

然而,我得出了不同的结果。

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

谢谢,

琼恩

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-03 15:02:25

要打印结果:

在Python语言中使用:.hexdigest()

  • In
  • 您使用:Convert.ToBase64String

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

代码语言:javascript
复制
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();
}

然后:

代码语言:javascript
复制
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中相同的输出:

代码语言:javascript
复制
739ebc1e3600d5be6e9fa875bd0a572d6aee9266
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11790599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档