SHA256CryptoServiceProvider e Relacionado possível a usar no WinXP?
-
18-09-2019 - |
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.
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