Windows server 2012"指定的算法无效。"

时间:2017-09-20 11:03:38

标签: c# encryption windows-server-2012-r2

当我尝试对数据进行签名时,它总是说明指定了无效算法。我使用以下代码:

enter image description here

这是我的证书详情。

enter image description here

请帮助我,谢谢。

1 个答案:

答案 0 :(得分:1)

而不是

RSACryptoServiceProvider csp = (RSACryptoServiceProvider)cert.PrivateKey;
return csp.SignHash(hash, CryptoConfig.MapNameToOid("SHA256"));

使用

using (RSA privateKey = cert.GetRSAPrivateKey())
{
    return privateKey.SignHash(hash, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}

(需要.NET 4.6 +)

问题是您的RSACryptoServiceProvider对象正在使用CAPI PROV_RSA_FULL提供程序,该提供程序早于SHA-2。 SHA-2签名(来自软件提供商)要求密钥位于PROV_RSA_AES,这一事实主要由密钥创建/ PFX导入控制。

您可以使用重新绑定提供程序类型的方法仍然使用soft-deprecated RSACryptoServiceProvider,但特别是在像这样的代码中(对象不会离开方法),您应该切换到使用cert.GetRSAPrivateKey()并避免将返回的RSA对象强制转换为算法基类。