2009-08-18 6 views
7

È possibile utilizzare SHA256CryptoServiceProvider e i relativi provider SHA2 su Windows XP? So che i provider utilizzano i servizi di crittografia inclusi in Vista e sopra è possibile installare questi servizi in XP da Microsoft?SHA256CryptoServiceProvider e correlati possibili da utilizzare su WinXP?

MODIFICA: Avrei dovuto fornire maggiori informazioni la documentazione su MSDN è errata rispetto a ciò che è supportato in Windows XP. Vedere http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=355031 dove questo è riconosciuto e accettato da Microsoft come da progetto. Tuttavia non c'è alcun lavoro in giro elencato da nessuna parte (che ho visto) quindi non ero sicuro se è possibile installare i servizi necessari per funzionare correttamente o se è come inclinare windwills cercando di installare IIS 6 o 7 su WinXP.

risposta

13

Sembra che la documentazione MSDN è proprio nel senso che dovrebbe essere supportati in XP SP3 dal disegno, e se non lo è, è solo a causa di un bug in .NET 3.5.

Sia AesCryptoServiceProvider che SHA256CryptoServiceProvider utilizzano lo stesso servizio di crittografia denominato "Microsoft Enhanced RSA e AES Cryptographic Provider". Sotto XP, il nome del servizio è leggermente diverso: "Microsoft Enhanced RSA e AES Cryptographic Provider (Prototype)". Il costruttore di AesCryptoServiceProvider di eseguire un controllo:

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)"; 
} 

I costruttori delle classi SHAxxxCryptoServiceProvider fanno non controllo del (Prototype) nome, e questo è il motivo per cui non riescono a XP. Se lo facessero, avrebbero avuto successo.

C'è una soluzione semplice su un dato PC. Passare alla chiave di registro HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Cryptography \ Defaults \ Provider, trovare la sottochiave denominata "Microsoft Enhanced RSA e AES Cryptographic Provider (Prototype)", esportarlo in .reg, modificare questo .reg ed eliminare "(Prototype) "dal suo nome. Quando lo si importa, la chiave originale verrà duplicata nella nuova chiave senza (Prototipo), con gli stessi contenuti. D'ora in poi, SHA256CryptoServiceProvider funzionerà su questa macchina XPSP3.

0

Da MSDN: SHA256CryptoServiceProvider Classe

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

+0

MSDN non è corretto. –

2

Ho avuto successo con il seguente frammento, anche se non sono molto soddisfatto con esso e quasi ha pubblicato una domanda su SO riguardante i vari modi apparentemente casuali di istanziare SHA512 in quel momento. Questo è testato su Windows XP, 7 e forse Vista (non ricordo).

using System.Security.Cryptography; 

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

Penso che questo dovrebbe funzionare allo stesso modo con SHA256.

Inoltre, confrontando l'output di entrambe le versioni con un'utilità unix sha2 ha suggerito che entrambi implementassero correttamente SHA512.

+0

Perché non usare sempre solo SHA512.Create()? –

+1

Il problema è il servizio di crittografia che SHA256/SHA512 non è incluso in Win XP che solleva PlatformNotSupportedException se chiamato su Win XP è per questo che stavo chiedendo se fosse possibile installarlo su Win XP o se è impossibile solo il modo è impossibile aggiornare a IIS 6 o 7 su XP. –

+0

@Rasmus Faber: Sì, potrei sempre utilizzare SHA512.Create(), ma non trarrai vantaggio dall'implementazione più recente (e presumibilmente migliore) su Vista o 7. Inoltre, ho originariamente scoperto il problema durante la distribuzione dalla mia macchina di sviluppo (vinci 7) in una scatola di Win XP. –