无法使用X509Certificate2验证签名

本文关键字:验证 X509Certificate2 | 更新日期: 2023-09-27 18:26:43

我正在尝试使用自签名证书对字符串进行签名,然后验证该字符串是否正确签名。

这就是我创建自签名证书的方式:

makecert -r -n "CN=AuthCert2" -ss my -a sha1 -pe

之后,我将证书导出到pfx文件,并尝试运行以下代码:

using System;
using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography;
using System.Net;
using System.Net.Security;
[TestClass]
public class TestSign
{
        [TestMethod]
        public void TestSignAndVerify()
        {
            string toSignString = "This is my string to sign";
            byte[] data = UnicodeEncoding.UTF8.GetBytes(toSignString);
            SHA1Managed sha1 = new SHA1Managed();
            byte[] hash = sha1.ComputeHash(data);
            X509Certificate2 signCert = new X509Certificate2("authcert2.pfx", "authpass");
            var csp = (RSACryptoServiceProvider)signCert.PrivateKey;
            byte[] signedData = csp.SignData(hash, CryptoConfig.MapNameToOID("SHA1"));
            RSACryptoServiceProvider csp2 = (RSACryptoServiceProvider)signCert.PublicKey.Key;
            bool result = csp2.VerifyHash(hash, CryptoConfig.MapNameToOID("SHA1"), signedData);
        }
}

然而,我总是得到错误的结果。我确信我错过了一些非常基本的东西。你知道发生了什么,或者我如何调试这个问题吗?

谢谢,

无法使用X509Certificate2验证签名

代码中有两个错误。首先,SignData计算已经包括计算哈希(无需自己计算),其次是使用VerifyHash而不是VerifyData