Domanda

E 'possibile utilizzare SHA256CryptoServiceProvider e relativi fornitori SHA2 su Windows XP? So che i provider utilizzano i servizi di crittografia che sono inclusi in Vista e sopra è possibile installare questi servizi in XP da Microsoft?

Modifica Avrei dovuto fornito ulteriori informazioni sulla documentazione MSDN è sbagliato con riferimento a questa supportato in Windows XP. Vedere http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback. aspx? FeedbackID = 355.031 ove ciò sia riconosciuto e accettato da Microsoft di progettazione. Tuttavia non v'è alcun lavoro intorno elencato ovunque (che ho visto) quindi non ero sicuro se è possibile installare i servizi di questo richiede per funzionare correttamente o se è come i mulini a windwills cercano di installare IIS 6 o 7 su WinXP.

È stato utile?

Soluzione

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

Sia AesCryptoServiceProvider e SHA256CryptoServiceProvider utilizzano lo stesso servizio cryptograhics denominato "Microsoft Enhanced RSA e AES Cryptographic Provider". Sotto XP, il nome del servizio è leggermente diversa: "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 do non controllare la (Prototype) nome, e questo è il motivo per cui non riescono a XP. Se lo facessero, avrebbero successo.

C'è una semplice soluzione su un determinato PC. Vai alla chiave di Registro HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Cryptography \ Defaults \ Provider , trovare la sua sottochiave denominata "Microsoft Enhanced RSA e AES Cryptographic Provider (Prototype)", l'esportazione a reg, modificare questa reg ed eliminare "(Prototype)" dal suo nome. Quando si importano indietro, la chiave originale verrà duplicata per la nuova chiave senza (Prototype), con gli stessi contenuti. D'ora in poi, SHA256CryptoServiceProvider lavorerà su questa macchina XPSP3.

Altri suggerimenti

Ho avuto successo con il seguente frammento, anche se non sono molto soddisfatto con esso e quasi postato un SO questione riguardante i vari modi apparentemente casuali di creare un'istanza SHA512 al momento. Questo è testato su Windows XP, 7, Vista e forse (non ricordo).

using System.Security.Cryptography;

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

Credo che questo dovrebbe funzionare lo stesso con SHA256.

Inoltre, confrontando l'uscita di entrambe le versioni, con un programma di utilità unix SHA2 suggerito che entrambi implementano correttamente SHA512.

Da MSDN: SHA256CryptoServiceProvider Class

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top