Pregunta

¿Es posible utilizar los proveedores SHA2 SHA256CryptoServiceProvider y relacionados en Windows XP? Sé que los proveedores utilizan los servicios de criptografía que se incluyen en Vista y arriba es posible instalar estos servicios en XP de Microsoft?

EDIT: que debería haber proporcionado más información en la documentación de MSDN está mal en lo que respecta a esta siendo compatible con Windows XP. Ver http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback. aspx? FeedbackID = 355031 donde esto es reconocido y aceptado por Microsoft como por diseño. Sin embargo no hay trabajo en torno enumerado en cualquier lugar (que vi) así que no estaba seguro de si es posible la instalación de los servicios de esta requiere para funcionar correctamente o si es como la inclinación al windwills tratando de instalar IIS 6 o 7 en WinXP.

¿Fue útil?

Solución

Parece que la documentación de MSDN está justo en el sentido de que debe apoyarse en XP SP3 por diseño, y si no lo es, es sólo a causa de un error en .NET 3.5.

Tanto AesCryptoServiceProvider y SHA256CryptoServiceProvider utilizan el mismo servicio cryptograhics llamado "Microsoft Enhanced RSA y AES Proveedor de cifrado". Bajo XP, el nombre del servicio es ligeramente diferente: "Microsoft Enhanced Proveedor de RSA y AES de cifrado (Prototipo)" . El constructor de AesCryptoServiceProvider realiza una sencilla comprobación:

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

Los constructores de clases SHAxxxCryptoServiceProvider hacen no Comprobar el nombre (Prototipo), y esto es por qué fallan en XP. Si lo hicieran, tendrían éxito.

Hay una solución sencilla en un PC determinado. Ir a clave de Registro HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Cryptography \ Defaults \ Provider , encontrará su subclave denominada "Microsoft Enhanced RSA y AES Proveedor de cifrado (Prototipo)", exportarlo a reg, editar este .reg y eliminar "(Prototipo)" de su nombre. Al importar de nuevo, la llave original se duplicará a la nueva clave y sin (Prototipo), con el mismo contenido. A partir de ahora, SHA256CryptoServiceProvider trabajará en esta máquina XPSP3.

Otros consejos

He tenido éxito con el siguiente fragmento, aunque no estoy muy satisfecho con ella y casi publicado un SO cuestión relativa a las diversas formas aparentemente al azar para crear una instancia SHA512 en el momento. Esto es probado en Windows XP, 7, y posiblemente Vista (no recuerdo).

using System.Security.Cryptography;

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

Creo que esto debería funcionar de la misma con SHA256.

Además, comparando la salida de las dos versiones con una utilidad de UNIX sha2 sugirió que ambos implementan correctamente SHA512.

A partir de MSDN: SHA256CryptoServiceProvider Clase

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top