将 X509Certificate 和 CryptoConfig 从 .Net 4.5 移植到 .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

谁能给我一些想法如何解决它?多谢

缺少在 .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://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.rsa.verifydata

最新更新