You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ecdsa.VerifyData()方法验证签名返回false问题排查咨询

C# ECDsa签名后验签始终返回false的问题排查及解决

核心问题排查方向

  • 公钥加载逻辑错误:你生成的.cer文件是带头尾标记的PEM格式文本,直接把文本内容转字节数组传入X509Certificate2构造函数会加载失败,拿到的公钥和签名私钥不匹配,这是最常见的原因。
  • 密钥对不匹配:签名用的.pfx文件和验签用的.cer文件不是同一次生成的,或者项目资源里的.cer是旧版本,没有随新生成的密钥更新。
  • 签名格式不一致:不同环境下ECDsa默认签名格式可能存在差异,没有显式指定的情况下会出现验签失败。
  • 代码笔误:验签方法里的异常提示存在笔误,虽然不影响逻辑,但报错时会干扰排查。

具体修复方案

1. 修复PEM格式公钥加载逻辑

你需要先把PEM格式的公钥文本解析为DER编码的字节数组,再加载证书:

public bool VerifyData(byte[] dataValue, byte[] dataSigned)
{
    // 读取资源中的PEM格式公钥字符串
    string pemCer = Properties.Resources.mycertCer;
    // 去除头尾标记和换行符
    string base64Cer = pemCer
        .Replace("-----BEGIN CERTIFICATE-----", string.Empty)
        .Replace("-----END CERTIFICATE-----", string.Empty)
        .Replace("\r", string.Empty)
        .Replace("\n", string.Empty);
    // 转换为DER编码字节数组
    byte[] derCer = Convert.FromBase64String(base64Cer);
    
    X509Certificate2 publicKey = new X509Certificate2(derCer);

    using (ECDsa ecdsa = publicKey.GetECDsaPublicKey())
    {
        // 修正异常提示信息
        if (ecdsa == null) throw new Exception("Not an ECDSA cert, or has no public key");
        // 显式指定签名格式,和签名逻辑保持一致
        return ecdsa.VerifyData(dataValue, dataSigned, HashAlgorithmName.SHA256, DSASignatureFormat.IeeeP1363FixedFieldConcatenation);
    }
}

2. 签名逻辑显式指定签名格式

同步修改签名方法,显式指定签名格式避免默认值差异:

public byte[] SignData(byte[] dataValue)
{
    X509Certificate2 privateKey = new X509Certificate2(privateKeyPfxFile);

    using (ECDsa ecdsa = privateKey.GetECDsaPrivateKey())
    {
        if (ecdsa == null) throw new Exception("Not an ECDSA cert, or has no private key");
        // 显式指定和验签一致的签名格式
        return ecdsa.SignData(dataValue, HashAlgorithmName.SHA256, DSASignatureFormat.IeeeP1363FixedFieldConcatenation);
    }
}

3. 确认密钥对一致性

每次调用CreateAsymmetricKeysPair生成新的密钥对后,都要把新生成的.cer文件重新导入到项目的资源文件中,同时确认签名用的.pfx路径对应的是同批次生成的文件。

内容的提问来源于stack exchange,提问作者Rudy Silva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:15:06