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.
之外
当我尝试签署数据时,它总是说指定的算法无效。我正在使用以下代码:
这是我的证书详细信息。
请帮助我,谢谢。
而不是
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.