如何使用sha1ecdsa验证使用公钥的签名数据?

kas*_*per 14 .net c# cryptography c#-4.0 ecdsa

对密码学知之甚少我对看似简单的任务有很大的疑问.

我有.pem证书,数据字节和该数据的签名.我想通过匹配签名来检查是否有人更改了数据.

我的尝试:

private bool VerifySignature(byte[] data, byte[] signature)
{
  try
  {
    X509Certificate certificate = new X509Certificate("cert_filename.pem");
    if (certificate == null)
      return false;

    DSACryptoServiceProvider dsa = (DSACryptoServiceProvider)certificate.PublicKey.Key;

    return dsa.VerifyData(data, signatureData);
  }
  catch
  {
    return false;
  }
}
Run Code Online (Sandbox Code Playgroud)

但它给了我一个错误

'不支持证书密钥算法'(System.NotSupportedException).

查看加载的证书,它表示签名算法是'sha1ecdsa'.

我只是想验证数据与签名.我在这里错过了什么?我想在没有任何外部解决方案的情况下这样做,因为它似乎是非常简单的任务.

更新:我正在尝试实现与以下Java代码相同的功能:

private boolean verify(byte[] data, byte[] signature)
{
  boolean isLicenseCorrect = false;

  Signature sig = Signature.getInstance("SHA1WithECDSA");
  sig.initVerify(certificate.getPublicKey());
  sig.update(data);

  return sig.verify(signature);
}
Run Code Online (Sandbox Code Playgroud)

Maa*_*wes 6

尽管DSA和ECDSA是相关的,但它们并不相同.为什么不试试ECDsaCryptoServiceProvider?请注意,ECDSA对椭圆曲线的支持仅包括NIST命名曲线.