簡體   English   中英

在沒有C#鍵的情況下檢查HMAC-SHA1

[英]Check HMAC-SHA1 without key in C#

我正在生成CMAC中沒有密鑰的HMAC-SHA1,每次針對相同的值使用不同的哈希值時,它都會返回,如何匹配哈希值,

我的代碼是https://dotnetfiddle.net/3a3tiP

  • 是否可以匹配這些哈希?
  • 我認為沒有密鑰就無法使用HMAC-SHA1,對嗎?
  • 如果在“是”以上,那么為什么C#允許不使用鍵來生成,它是怎么做的?

是的,因為您正在使用無參數構造函數來構建HMACSHA1實例,並且MSDN說

HMACSHA1()-使用隨機生成的密鑰初始化HMACSHA1類的新實例。

只需添加一些常量鍵,您每次都會得到相同的哈希值。 例如

var hmacSha = new HMACSHA1(Encoding.UTF8.GetBytes("yourConstantKey"));

並回答您的問題:

  1. 是的,請使用相同的密鑰2代。
  2. 是。
  3. 它為您生成隨機密鑰

HMACSHA1的文檔中:

如果發送者和接收者共享一個秘密密鑰,則可以使用基於哈希的消息身份驗證代碼(HMAC)來確定通過不安全通道發送的消息是否已被篡改。

是的,您需要一個鑰匙。 如果您未指定密鑰,則會為您生成一個密鑰,然后您可以使用Key屬性來獲取它(例如,存儲它)。 或者,您可以在構造函數中指定它,也可以設置Key屬性,這是因為您已經從另一方那里收到了它,或者是因為您想重用以前生成的鍵。

如果使用相同的密鑰對相同的數據進行哈希處理,則結果應為相同的哈希值。

正如在評論中指出, 應該再轉換到HMAC使用字符串Encoding.GetString ,因為它是任意的二進制數據-這不是編碼的文本。 最簡單的方法可能是使用base64代替:

string base64Hmac = Convert.ToBase64String(hmac);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM