Windows 服务器 2012 "Invalid algorithm specified."

Windows server 2012 "Invalid algorithm specified."

当我尝试签署数据时,它总是说指定的算法无效。我正在使用以下代码:

这是我的证书详细信息。

请帮助我,谢谢。

而不是

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 对象正在使用早于 SHA-2 的 CAPI PROV_RSA_FULL 提供程序。 SHA-2 签名(来自软件提供商)要求密钥在 PROV_RSA_AES 中,这一事实主要由密钥创建/PFX 导入控制。

有一个解决方法可以重新绑定提供者类型以仍然使用 soft-deprecated RSACryptoServiceProvider,但特别是在这样的代码中(对象不离开方法的地方)你应该切换到使用 cert.GetRSAPrivateKey() 并避免将返回的 RSA 对象投射到算法基础 class.

之外