14

暗号化についてほとんど知らない私は、単純な作業のように見える作業に大きな問題を抱えています。

.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;
  }
}

しかし、それは私にエラーを与えます

「証明書キーのアルゴリズムはサポートされていません」(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);
}
4

2 に答える 2

6

DSA と ECDSA は関連していますが、同じではありません。試してみませんECDsaCryptoServiceProviderか?楕円曲線の ECDSA サポートには、NIST の名前付き曲線のみが含まれることに注意してください。

于 2015-05-09T21:41:22.360 に答える