[英]Check HMAC-SHA1 without key in C#
我正在生成CMAC中沒有密鑰的HMAC-SHA1,每次針對相同的值使用不同的哈希值時,它都會返回,如何匹配哈希值,
我的代碼是https://dotnetfiddle.net/3a3tiP
是的,因為您正在使用無參數構造函數來構建HMACSHA1實例,並且MSDN說
HMACSHA1()-使用隨機生成的密鑰初始化HMACSHA1類的新實例。
只需添加一些常量鍵,您每次都會得到相同的哈希值。 例如
var hmacSha = new HMACSHA1(Encoding.UTF8.GetBytes("yourConstantKey"));
並回答您的問題:
從HMACSHA1
的文檔中:
如果發送者和接收者共享一個秘密密鑰,則可以使用基於哈希的消息身份驗證代碼(HMAC)來確定通過不安全通道發送的消息是否已被篡改。
是的,您需要一個鑰匙。 如果您未指定密鑰,則會為您生成一個密鑰,然后您可以使用Key
屬性來獲取它(例如,存儲它)。 或者,您可以在構造函數中指定它,也可以設置Key
屬性,這是因為您已經從另一方那里收到了它,或者是因為您想重用以前生成的鍵。
如果使用相同的密鑰對相同的數據進行哈希處理,則結果應為相同的哈希值。
正如在評論中指出, 不應該再轉換到HMAC使用字符串Encoding.GetString
,因為它是任意的二進制數據-這不是編碼的文本。 最簡單的方法可能是使用base64代替:
string base64Hmac = Convert.ToBase64String(hmac);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.