2009-08-18 12 views
7

Czy w systemie Windows XP można używać SHA256CryptoServiceProvider i powiązanych dostawców SHA2? Wiem, że dostawcy używają usług kryptograficznych, które są zawarte w Vista i wyżej, czy możliwe jest zainstalowanie tych usług w XP od Microsoft?SHA256CryptoServiceProvider i związane z nimi możliwe do wykorzystania na WinXP?

EDIT: Powinienem podać więcej informacji dokumentacja na MSDN jest źle, ponieważ jest obsługiwany w systemie Windows XP. Zobacz http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=355031, gdzie jest to potwierdzane i akceptowane przez firmę Microsoft zgodnie z projektem. Jednak nie ma żadnej pracy wymienionej gdziekolwiek (którą widziałem), więc nie byłem pewien, czy jest możliwe zainstalowanie usług, które to wymaga do poprawnego działania, czy też jest to jak przechylanie się na wietrze, próbując zainstalować IIS 6 lub 7 na WinXP.

Odpowiedz

13

Wydaje się, że dokumentacja MSDN ma rację w tym sensie, że powinny być wspierane w XP SP3 z projektem, a jeśli tak nie jest, to tylko ze względu na bug w .NET 3.5.

Zarówno AesCryptoServiceProvider, jak i SHA256CryptoServiceProvider korzystają z tej samej usługi cryptograhics o nazwie "Microsoft Enhanced RSA and AES Cryptographic Provider". Pod XP nazwa usługi jest nieco inna: "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)". Konstruktor AesCryptoServiceProvider wykonuje prostą kontrolę:

string providerName = "Microsoft Enhanced RSA and AES Cryptographic Provider"; 
if(Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor == 1) 
{ 
    providerName = "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"; 
} 

Konstruktorzy klas SHAxxxCryptoServiceProvider zrobić nie Sprawdzić (prototyp) imię i nazwisko, a to dlatego, że nie w XP. Jeśli tak, to się uda.

Istnieje proste obejście tego problemu na danym komputerze. Przejdź do klucza rejestru HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Cryptography \ Defaults \ Provider, znajdź jego podklucz o nazwie "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)", wyeksportuj go do .reg, edytuj to .reg i usuń "(Prototype) "od jego nazwy. Po zaimportowaniu go oryginalny klucz zostanie skopiowany do nowego klucza bez (Prototype) z tą samą zawartością. Odtąd SHA256CryptoServiceProvider będzie działać na tym komputerze XPSP3.

0

Od MSDN: SHA256CryptoServiceProvider klasy

platformach: Windows Vista, Windows XP SP2, Windows Server 2003

+0

Usługa MSDN nie spełnia tego warunku. –

2

ja miałem sukces z następującym fragmencie, chociaż nie jestem z niego zadowolony i prawie opublikował pytanie SO dotyczące różnych pozornie przypadkowych sposobów na utworzenie w tym momencie SHA512. To jest testowane na Windows XP, 7 i prawdopodobnie Vista (nie pamiętam).

using System.Security.Cryptography; 

     SHA512 hash; 
     try 
     { 
      hash = new SHA512Cng(); 
     } 
     catch (PlatformNotSupportedException) 
     { 
      hash = SHA512.Create(); 
     } 

Myślę, że to powinno działać tak samo z SHA256.

Porównywanie wyników obu wersji z narzędziem unix sha2 sugerowało, że oba poprawnie implementują SHA512.

+0

Dlaczego po prostu nie używać SHA512.Create()? –

+1

Problemem jest usługa szyfrowania, że ​​SHA256/SHA512 nie jest zawarta w Win XP, co podnosi wyjątek PlatformNotSupportedException, jeśli został wywołany w Win XP, dlatego pytałem, czy można go zainstalować na Win XP lub, jeśli to niemożliwe, tylko sposób na aktualizację do IIS 6 lub 7 na XP. –

+0

@Rasmus Faber: Tak, zawsze mogłem używać SHA512.Create(), ale nie korzystałem z nowszej (i podobno lepszej) implementacji w Vista lub 7. Początkowo odkryłem problem podczas wdrażania z mojej maszyny programistycznej (wygraj 7) do skrzynki Win XP. –

Powiązane problemy