SHA256CryptoServiceProvider和相关的可能在WinXP上使用?

时间:2009-08-18 13:37:00

标签: c# security encryption sha256

是否可以在Windows XP上使用SHA256CryptoServiceProvider和相关的SHA2提供程序?我知道提供商使用Vista中包含的加密服务以上是否可以从Microsoft在XP中安装这些服务?

编辑:我应该提供更多信息,关于MSDN上的文档在Windows XP中受支持是错误的。请参阅http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=355031,其中Microsoft已确认并接受此设计。然而,在任何地方都没有列出任何工作(我看到)所以我不确定是否可以安装这需要正常工作的服务,或者是否像在Windwills上试图在WinXP上安装IIS 6或7一样倾斜。

3 个答案:

答案 0 :(得分:13)

似乎MSDN文档是正确的,因为它应该在设计中支持XP SP3,如果不是,那只是因为 bug 在.NET 3.5中。

AesCryptoServiceProvider和SHA256CryptoServiceProvider都使用名为“Microsoft Enhanced RSA and AES Cryptographic Provider”的相同cryptograhics服务。在XP下,服务名称略有不同:“Microsoft增强型RSA和AES加密提供程序(原型)”。 AesCryptoServiceProvider的构造函数执行简单的检查:

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

SHAxxxCryptoServiceProvider类的构造函数检查(Prototype)名称,这就是它们在XP中失败的原因。如果他们这样做了,他们就会成功。

在给定的PC上有一个简单的解决方法。转到注册表项 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Cryptography \ Defaults \ Provider ,找到名为“Microsoft Enhanced RSA and AES Cryptographic Provider(Prototype)”的子项,将其导出到.reg,编辑此.reg并从名称中删除“(Prototype)”。当您将其导回时,原始密钥将复制到新密钥而不使用(Prototype),具有相同的内容。从现在开始,SHA256CryptoServiceProvider将在这台XPSP3机器上运行。

答案 1 :(得分:2)

我已经成功使用了以下片段,虽然我对此并不满意,并且几乎发布了一个关于当时实例化SHA512的各种看似随意的方法的问题。这是在Windows XP,7和可能的Vista(不记得)上测试的。

using System.Security.Cryptography;

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

我认为这应该与SHA256相同。

此外,将两个版本的输出与unix sha2实用程序进行比较表明它们都正确实现了SHA512。

答案 2 :(得分:0)

来自MSDN: SHA256CryptoServiceProvider类

平台: Windows Vista,Windows XP SP2,Windows Server 2003