2013-01-11 151 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

相关问题