【问题标题】:HMAC sha256 returning different values in c# than pythonHMAC sha256在c#中返回与python不同的值
【发布时间】:2015-10-23 19:55:36
【问题描述】:

我需要将一些 python 代码移植到 c# 中,但我在使用这一行时遇到了一些问题:

Python

hmac.new(key, message,digestmod=hashlib.sha256).digest()

C#

HMACSHA256 hm = new HMACSHA256(key);
byte[] result = hm.ComputeHash(enc.GetBytes(message));

为什么当密钥和消息相同(逐字节检查)时,我在 C# 中得到不同的结果?

【问题讨论】:

    标签: c# python sha256


    【解决方案1】:

    如果在将消息转换为字节数组时使用不同的编码,您可以获得相同消息的不同哈希值。目前尚不清楚您使用的是哪种编码,但关键是它们应该匹配。

    例如:

    hmac.new("mykey", "mymessage",digestmod=hashlib.sha256).digest()
    

    gTM3eMvH4WsjwCGzp4gZNV5a62dEcWw/gjTMPngjJpQ=

    在 C# 中,根据您的“enc”变量,您会得到不同的结果。

    Encoding enc = Encoding.GetEncoding("ASCII");
    

    gTM3eMvH4WsjwCGzp4gZNV5a62dEcWw/gjTMPngjJpQ=

    Encoding enc = Encoding.GetEncoding("Unicode");
    

    2wqHPyE5oiI3ukxOaKo9ao6AN8fcwjgdDInBHTXTwGQ=

    【讨论】:

    • 谢谢。我仍然无法弄清楚python函数使用哪种编码。我试过chardet,它检测为windows-1251,但不是那个。我尝试过 UTF 7、8、16、32 和 Unicode,但它似乎不是其中之一。
    猜你喜欢
    • 2020-10-18
    • 1970-01-01
    • 2016-04-28
    • 2020-10-19
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    相关资源
    最近更新 更多