Pergunta

É possível usar os fornecedores SHA256CrypToServiceProvider e SHA2 relacionados no Windows XP? Sei que os provedores usam os serviços de criptografia incluídos no Vista e acima é possível instalar esses serviços no XP da Microsoft?

EDITAR: Eu deveria ter fornecido mais informações que a documentação sobre o MSDN está errada em relação a isso sendo suportado no Windows XP. Ver http://connect.microsoft.com/visualstudio/feedback/viewfeedback.aspx?feedbackid=355031 onde isso é reconhecido e aceito pela Microsoft como por design. No entanto, não há trabalho listado em nenhum lugar (que eu vi), então eu não tinha certeza se é possível instalar os serviços que isso exige para funcionar corretamente ou se é como inclinar os windwills tentando instalar o IIS 6 ou 7 no WinXP.

Foi útil?

Solução

Parece que a documentação do MSDN está certa no sentido de que ela deve ser suportado no XP SP3 por design e, se não for, é apenas por causa de um incomodar no .NET 3.5.

Tanto o AesCryptoServiceProvider quanto o SHA256CryptoServiceProvider usam o mesmo serviço de criptographics chamado "Microsoft aprimorou o fornecedor criptográfico RSA e AES". Sob XP, o nome do serviço é um pouco diferente: "Microsoft aprimorou o fornecedor criptográfico RSA e AES (protótipo)". O construtor do aescryptoserviceProvider executa uma verificação simples:

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

Os construtores de classes shaxxxcryptoServiceProvider não Verifique o nome (protótipo) e é por isso que eles falham no XP. Se o fizessem, teriam sucesso.

Existe uma solução alternativa simples em um determinado PC. Vá para a chave do registro HKEY_LOCAL_MACHINE Software Microsoft Cryptography Padrão Provedor, Encontre sua subchave denominada "Microsoft aprimorou o fornecedor criptográfico RSA e AES (protótipo)", exporte -o para .reg, edite este .reg e exclua "(protótipo)" do seu nome. Quando você o importa de volta, a chave original será duplicada para a nova chave sem (protótipo), com o mesmo conteúdo. A partir de agora, o SHA256CryptoServiceProvider funcionará nesta máquina XPSP3.

Outras dicas

Tive sucesso com o seguinte trecho, embora não esteja realmente satisfeito com ele e quase publique uma pergunta sobre as várias maneiras aparentemente aleatórias de instanciar SHA512 no momento. Isso é testado no Windows XP, 7 e possivelmente Vista (não me lembro).

using System.Security.Cryptography;

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

Eu acho que isso deve funcionar da mesma forma com SHA256.

Além disso, comparar a saída de ambas as versões com um utilitário UNIX SHA2 sugeriu que ambos implementassem corretamente o SHA512.

De MSDN: SHA256CRYPTOSERVICEPROVER CLASSE

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top