HMAC sha256在c#中返回不同于python的值

时间:2015-10-23 11:06:12

标签: c# python sha256

我需要将一些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#中得到不同的结果?

1 个答案:

答案 0 :(得分:5)

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

例如:

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 =