Ich weiß wenig über Kryptographie Ich habe große Probleme mit scheinbar einfachen Aufgaben.Wie verifiziert man Daten gegen die Signatur mit einem öffentlichen Schlüssel, der sha1ecdsa verwendet?
Ich habe .pem-Zertifikat, Datenbytes und Signatur dieser Daten. Ich möchte überprüfen, ob jemand die Daten geändert hat, indem er sie mit der Unterschrift abgeglichen hat.
Mein Versuch:
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;
}
}
Aber es gibt mir einen Fehler
'Algorithmus von Zertifikaten Schlüssel wird nicht unterstützt' (System.NotSupportedException).
Wenn Sie ein geladenes Zertifikat anzeigen, heißt es, dass der Signaturalgorithmus 'sha1ecdsa' lautet.
Ich versuche nur Daten gegen Unterschrift zu verifizieren. Was fehlt mir hier? Ich würde es gerne ohne externe Lösungen machen, da es eine wirklich triviale Aufgabe zu sein scheint.
Update: Ich gleiche Funktionalität wie in unten Java-Code zu erreichen versuche:
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);
}
nach Ihrem Update, wenn Sie den Java-Code in C# konvertieren möchten [Link] (http://dotnetslacker.com/articles/security/Hashing_MACs_and_Digital_Signatures_in_NET.aspx) könnte dies helfen, einen Blick –