2016-03-25 52 views
0

我正在嘗試使用secret的密鑰和foo的有效負載創建base64編碼的HMAC SHA512哈希。我無法讓我的.NET代碼產生正確的價值。我想知道如果編碼是潛在的問題。.Net HMAC和base64編碼問題

代碼:

UTF8Encoding encoding = new UTF8Encoding(); 
HMACSHA512 hmac = new HMACSHA512(encoding.GetBytes("secret")); // init the HMAC hash with "secret" as a byte array 
byte[] hash = hmac.ComputeHash(encoding.GetBytes("foo")); // hash the payload 
String result = Convert.ToBase64String(hash); // Base64 encode the payload 

不正確的哈希&的base64結果:

gt9xA96Ngt5F4BxF/mQrXRPGwrR97K/rwAlDHGZcb6Xz0a9Ol46hvekUJmIgc+vqxho0Ye/UZ+CXHHiLyOvbvg==

期望的散列&的base64結果:

ODJkZjcxMDNkZThkODJkZTQ1ZTAxYzQ1ZmU2NDJiNWQxM2M2YzJiNDdkZWNhZmViYzAwOTQzMWM2NjVjNmZhNWYzZDFhZjRlOTc4ZWExYmRlOTE0MjY2MjIwNzNlYmVhYzYxYTM0NjFlZmQ0NjdlMDk3MWM3ODhiYzhlYmRiYmU=

+1

如果沒有產生 「預期」 的結果,你必須從其他地方得到它。在哪裏看到這個? – dana

+0

@dana 我有一個node.js程序和一個生成正確哈希的php程序。 – mark

回答

2

由於第二個版本只是Hex表示的Base64,所以需要將字節數組轉換爲第一個十六進制數,並將該字符串轉換爲Base64 ASCII版本。

步驟:

+0

就是這樣。我已經看到了你引用的問題,但直到你說我需要首先將字節[]轉換爲十六進制,它纔有意義。謝謝。 – mark