2013-01-11 15 views
5

Mam obecnie duży problem (Środowisko: .NET 4.5 Core): Musimy chronić wiadomość za pomocą klucza za pomocą algorytmu HMAC-SHA1. Problem polega na tym, że klasa HMACSHA1 przestrzeni nazw System.Security.Cryptography i sama przestrzeń nazw nie istnieją w .NET 4.5 Core, ta przestrzeń nazw istnieje tylko w normalnej wersji .NET.Jak obliczyć kod uwierzytelniania HMAC-SHA1 w .NET 4.5 Core

Próbowałem na wiele sposobów znaleźć odpowiednik przestrzeni nazw dla naszego celu, ale jedyną rzeczą, którą znalazłem był Windows.Security.Cryptography, który niestety nie oferuje szyfrowania HMAC.

Czy ktoś ma pomysł, w jaki sposób mogę rozwiązać nasz problem lub czy istnieje jakieś bezpłatne rozwiązanie?

+0

o wyjaśnienie, jeśli odnoszą się do .net 4.5 core, masz na myśli podzbiór win8 api .net 4.5, dlatego nie masz dostępu do System.Security.Cryptography? – jbtule

Odpowiedz

9

Przestrzeń nazw Windows.Security.Cryptography zawiera HMAC.

utworzyć MacAlgorithmProvider obiektu poprzez wywołanie statycznej OpenAlgorithm metody i określając jedną z następujących algorytmów nazwami: 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

Dziękuję za szybką odpowiedź. To było pomocne, ponieważ udało mi się uruchomić metodę CreateHMAC (opisaną w technecie http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh802419.aspx) z powodzeniem, ale potrzebuję czegoś takiego : HMAC_SHA1 ("key", "Szybki brązowy lis przeskakuje nad leniwym psem") = 0xde7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9 Czy wiesz, w jaki sposób mogę uzyskać taką wartość hash. Z góry dziękuję – SwissPrime

+1

Tak, zaktualizowana odpowiedź. – jbtule