我在C#中生成没有键的HMAC-SHA1,并且每次返回相同值的不同哈希值时,如何匹配哈希值,
我的代码是https://dotnetfiddle.net/3a3tiP
答案 0 :(得分:3)
是的,因为您使用无参数构造函数来构建HMACSHA1实例,并且MSDN says
HMACSHA1() - 使用随机生成的密钥初始化HMACSHA1类的新实例。
只需添加一些常量键,每次都会获得相同的哈希值。 e.g。
var hmacSha = new HMACSHA1(Encoding.UTF8.GetBytes("yourConstantKey"));
回答你的问题:
答案 1 :(得分:2)
来自HMACSHA1
的文档:
如果发送方和接收方共享密钥,则可以使用基于哈希的消息认证码(HMAC)来确定通过不安全信道发送的消息是否已被篡改。
所以是的,你需要一把钥匙。如果您没有指定密钥,则会为您生成一个密钥,然后您可以使用Key
property来获取密钥(例如,存储密钥)。或者您可以在构造函数中指定它,或者设置Key
属性,因为您已经从另一方接收了它,或者因为您想重用以前生成的密钥。
如果使用相同的密钥散列相同的数据,则应获得与结果相同的散列。
如评论中所述,您应该不然后使用Encoding.GetString
将HMAC转换为字符串,因为它是任意二进制数据 - 它是不是编码的文本。最简单的方法可能是使用base64:
string base64Hmac = Convert.ToBase64String(hmac);