2013-01-11 153 views
5

我目前面臨一個很大的問題(環境:.NET 4.5核心):我們需要使用HMAC-SHA1算法通過密鑰來保護消息。問題是名稱空間System.Security.Cryptography的HMACSHA1類和名稱空間本身在.NET 4.5 Core中不存在,此名稱空間僅存在於.NET的正常版本中。如何在.NET 4.5 Core中計算HMAC-SHA1認證碼

我嘗試了很多方法來找到我們的目的等效命名空間,但我發現的唯一的事情是Windows.Security.Cryptography這可悲的是不提供HMAC-加密。

有沒有人有一個想法,我可以如何解決我們的問題,或者有沒有免費使用第三方解決方案?

+0

爲了澄清,當你引用.NET 4.5核心,你的意思是.net 4.5的win8 api子集,這就是爲什麼你無法訪問System.Security.Cryptography? – jbtule

回答

9

名稱空間Windows.Security.Cryptography包含HMAC。

通過調用靜態OpenAlgorithm方法並指定下列算法 名稱之一創建一個MacAlgorithmProvider對象:HMAC_MD5 HMAC_SHA1 HMAC_SHA256 HMAC_SHA384 HMAC_SHA512 AES_CMAC

http://msdn.microsoft.com/en-us/library/windows/apps/windows.security.cryptography.core.macalgorithmprovider.aspx

public static byte[] HmacSha1Sign(byte[] keyBytes, string message){ 
    var messageBytes= Encoding.UTF8.GetBytes(message); 
    MacAlgorithmProvider objMacProv = MacAlgorithmProvider.OpenAlgorithm("HMAC_SHA1"); 
    CryptographicKey hmacKey = objMacProv.CreateKey(keyBytes.AsBuffer()); 
    IBuffer buffHMAC = CryptographicEngine.Sign(hmacKey, messageBytes.AsBuffer()); 
    return buffHMAC.ToArray(); 

} 
+0

感謝您的快速回復。這很有幫助我能夠成功運行CreateHMAC方法(在technet上描述http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh802419.aspx),但我需要的是這樣的東西: HMAC_SHA1(「key」,「快速棕色狐狸跳過懶狗」)= 0xde7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9 你知道我該如何檢索這樣的散列值。 預先感謝您 – SwissPrime

+1

是的,更新了答案。 – jbtule

相關問題