将 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 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