是否有可能使用SHA256CryptoServiceProvider及相关SHA2提供商在Windows XP? 我知道商使用包含在Vista中的加密服务及以上,才有可能从微软在XP中安装这些服务?
编辑:我应该提供更多的信息,在MSDN文档是错误的关于这个存在于Windows XP中支持。 见http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=355031哪里,这是承认和接受微软通过设计。 但是没有任何地方上市工作(即我看到了),所以我不知道是否有可能安装此要求正常工作的服务,或者它就像在windwills试图在WinXP安装IIS 6或7倾斜。
看来,MSDN文档就在这个意义上,它应该在XP SP3通过设计来支持,如果它不是,它只是在.NET 3.5中的一个错误 ,因为。
无论AesCryptoServiceProvider和SHA256CryptoServiceProvider使用名为相同cryptograhics服务“Microsoft增强RSA和AES加密提供”。 在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类的构造函数不检查(原型)的名字,这就是为什么他们在XP失败。 如果他们这么做,他们会取得成功。
有一个给定的PC上的一个简单的解决方法。 转到注册表项HKEY_LOCAL_MACHINE \ SOFTWARE \微软\加密\默认\供应商 ,找到其命名子项“Microsoft增强RSA和AES加密提供程序(原型)”,导出为.reg的,编辑此.reg和删除“(原型)”从它的名字。 当您导入回来,原来的钥匙将被复制到无(原型)的新项,内容相同。 从现在起,将SHA256CryptoServiceProvider本XPSP3机器上工作。
我已经与下面的代码段成功,虽然我不是很满意,它几乎就贴在各种看似杂乱无章的方式来实例化一个SO问题SHA512
的时间。 这是Windows XP,Windows 7和Vista的可能(记不清了)测试。
using System.Security.Cryptography;
SHA512 hash;
try
{
hash = new SHA512Cng( );
}
catch ( PlatformNotSupportedException )
{
hash = SHA512.Create( );
}
我认为这应该工作一样用SHA256
。
此外,两个版本的输出与UNIX SHA2工具比较表明,它们都能够正确执行SHA512。
从MSDN:SHA256CryptoServiceProvider类
平台:Windows Vista中,Windows XP SP2,Windows Server 2003中