我需要通過使用SHA256哈希函數來計算HMAC。我有一個以base64格式編碼的密鑰。還有一個在線工具可以正確計算HMAC(已驗證)。 http://www.freeformatter.com/hmac-generator.html 我寫了下面的代碼片段:C#中HMAC SHA256哈希計算
var signatureHashHexExpected = "559bd871bfd21ab76ad44513ed5d65774f9954d3232ab68dab1806163f806447";
var signature = "123456:some-string:2016-04-12T12:44:16Z";
var key = "AgQGCAoMDhASFAIEBggKDA4QEhQCBAYICgwOEBIUAgQ=";
var shaKeyBytes = Convert.FromBase64String(key);
using (var shaAlgorithm = new System.Security.Cryptography.HMACSHA256(shaKeyBytes))
{
var signatureBytes = System.Text.Encoding.UTF8.GetBytes(signature);
var signatureHashBytes = shaAlgorithm.ComputeHash(signatureBytes);
var signatureHashHex = string.Concat(Array.ConvertAll(signatureHashBytes, b => b.ToString("X2"))).ToLower();
System.Diagnostics.Debug.Assert(signatureHashHex == signatureHashHexExpected);
}
問題: 我的代碼不會產生正確的HMAC。我通過使用不同的在線工具和替代C#實現來驗證不同的步驟。只有從base64轉換未被確認。我錯過了什麼?
UPDATE:通過我的代碼 計算signatureHashHex是「a40e0477a02de1d134a5c55e4befa55d6fca8e29e0aa0a0d8acf7a4370208efc」
答: 的問題是由誤導性陳述文檔的關鍵在Base64格式設置造成的。見接受的答案:
var shaKeyBytes = System.Text.Encoding.UTF8.GetBytes(key);
你確定簽名是用UTF8編碼的嗎? –
你試過這個:http://stackoverflow.com/q/33419006/479156 – Ivar
不,但我嘗試了許多不同的編碼,結果相同。 – Kalitsov