将.Net 4.5中的X509Certificate和CryptoConfig移植到.Net Core

时间:2017-04-12 04:54:23

标签: c# .net cryptography .net-core x509

我正在将一个.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上的Key中没有System.Security.Cryptography.X509Certificates.PublicKey属性
  • .Net Core上的System.Security.Cryptography中没有CryptoConfig

有谁可以给​​我一些想法如何修复它?非常感谢

1 个答案:

答案 0 :(得分:2)

您缺少对.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.VerityData(
            bytes,
            Convert.FromBase64String(signature),
            HashAlgorithmName.SHA1,
            RSASignaturePadding.Pkcs1);
    }
}