将 X509Certificate 和 CryptoConfig 从 .Net 4.5 移植到 .Net Core
Porting X509Certificate and CryptoConfig from .Net 4.5 to .Net Core
我正在将一个 .Net 4.5 项目移植到 .Net Core,但我陷入了这个功能...
public bool IsMessageSignatureValid(byte[] bytes, string signature) {
X509Certificate2 certificate = GetX509Certificate();
RSACryptoServiceProvider rsa = certificate.PublicKey.Key as RSACryptoServiceProvider;
return rsa.VerifyData(bytes, CryptoConfig.MapNameToOID("SHA1"), Convert.FromBase64String(signature));
}
- .Net Core
System.Security.Cryptography.X509Certificates.PublicKey
中没有 Key
属性
- .Net Core System.Security.Cryptography 中没有
CryptoConfig
class
谁能给我一些解决办法?非常感谢
您错过了 .NET 4.6 中对证书和 RSA 所做的增强。 .NET Core 1.0 和 1.1 只允许新的做事方式,因为它在非 Windows 系统上工作得更好。
public bool IsMessageSignatureValid(byte[] bytes, string signature) {
// New instance each call? If so, dispose this.
X509Certificate2 certificate = GetX509Certificate();
// GetRSAPublicKey returns a new object each time,
// you should definitely using/Dispose it.
using (RSA rsa = certificate.GetRSAPublicKey())
{
return rsa.VerifyData(
bytes,
Convert.FromBase64String(signature),
HashAlgorithmName.SHA1,
RSASignaturePadding.Pkcs1);
}
}
来源:https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.rsa.verifydata
我正在将一个 .Net 4.5 项目移植到 .Net Core,但我陷入了这个功能...
public bool IsMessageSignatureValid(byte[] bytes, string signature) {
X509Certificate2 certificate = GetX509Certificate();
RSACryptoServiceProvider rsa = certificate.PublicKey.Key as RSACryptoServiceProvider;
return rsa.VerifyData(bytes, CryptoConfig.MapNameToOID("SHA1"), Convert.FromBase64String(signature));
}
- .Net Core
System.Security.Cryptography.X509Certificates.PublicKey
中没有Key
属性 - .Net Core System.Security.Cryptography 中没有
CryptoConfig
class
谁能给我一些解决办法?非常感谢
您错过了 .NET 4.6 中对证书和 RSA 所做的增强。 .NET Core 1.0 和 1.1 只允许新的做事方式,因为它在非 Windows 系统上工作得更好。
public bool IsMessageSignatureValid(byte[] bytes, string signature) {
// New instance each call? If so, dispose this.
X509Certificate2 certificate = GetX509Certificate();
// GetRSAPublicKey returns a new object each time,
// you should definitely using/Dispose it.
using (RSA rsa = certificate.GetRSAPublicKey())
{
return rsa.VerifyData(
bytes,
Convert.FromBase64String(signature),
HashAlgorithmName.SHA1,
RSASignaturePadding.Pkcs1);
}
}
来源:https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.rsa.verifydata