暗号化についてほとんど知らない私は、単純な作業のように見える作業に大きな問題を抱えています。
.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);
}