Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SHA256CryptoServiceProvider和可能在WinXP上使用的相关文件?_C#_Security_Encryption_Sha256 - Fatal编程技术网

C# SHA256CryptoServiceProvider和可能在WinXP上使用的相关文件?

C# SHA256CryptoServiceProvider和可能在WinXP上使用的相关文件?,c#,security,encryption,sha256,C#,Security,Encryption,Sha256,是否可以在Windows XP上使用SHA256CryptoServiceProvider和相关的SHA2提供程序?我知道提供商使用Vista及以上版本中包含的加密服务。是否可以从Microsoft在XP中安装这些服务 编辑:我本应提供更多信息,MSDN上的文档在Windows XP支持这方面是错误的。查看Microsoft在何处认可和接受此设计。但是,任何地方都没有列出(我看到的)解决方法,因此我不确定是否可以安装正常工作所需的服务,或者这是否像在WinXP上尝试安装IIS 6或7时向wind

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

编辑:我本应提供更多信息,MSDN上的文档在Windows XP支持这方面是错误的。查看Microsoft在何处认可和接受此设计。但是,任何地方都没有列出(我看到的)解决方法,因此我不确定是否可以安装正常工作所需的服务,或者这是否像在WinXP上尝试安装IIS 6或7时向windwills倾斜一样。

来自MSDN: SHA256CryptoServiceProvider类

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

我已经成功地编写了以下代码片段,尽管我对它并不十分满意,并且几乎发布了一个关于当时实例化
SHA512
的各种看似随意的方法的问题。这是在WindowsXP、7上测试的,可能还有Vista(不记得了)

我认为这应该适用于
SHA256


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

从设计上讲,MSDN文档应该在XP SP3中得到支持,这似乎是正确的,如果不是,那只是因为.NET 3.5中存在一个错误

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

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\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider,找到其名为“Microsoft增强RSA和AES加密提供程序(原型)”的子项,将其导出到.reg,编辑此.reg并从其名称中删除“(原型)”。当您将其重新导入时,原始密钥将复制到新密钥,而不使用(原型),内容相同。从现在起,SHA256CryptoServiceProvider将在这台XPSP3机器上工作。

为什么不始终使用SHA512.Create()?问题是Win XP中不包含SHA256/SHA512的加密服务,如果在Win XP上调用,会引发平台NotSupportedException。这就是为什么我问它是否可以安装在Win XP上,或者它是否不可能升级到IIS 6或7。@Rasmus Faber:是的,我可以一直使用SHA512.Create(),但我不会从Vista或7上更新(据说更好)的实现中获益。另外,我最初在从我的开发机器(win 7)部署到win XP机器时发现了这个问题。@Chris Marisic:我不确定你的评论;上面的代码在WinXP(SP3)上用.NET3.5SP1(iirc,但肯定没有更多)成功测试过,因此hash=SHA512.Create()为我提供了一个计算哈希的对象。
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)";
}