Überprüfen Sie die Signatur für x509-Zertifikat
Habe ich:
- x509 certificate (Base64);
- String Daten;
- Signatur von string-Daten (Base64).
Ist es möglich zu überprüfen, Signatur?
Mein code:
bool valid = false;
var signature = Convert.FromBase64String(base64Signature);
var data = Encoding.UTF8.GetBytes(stringData);
var x509 = new X509Certificate2(Convert.FromBase64String(certificate));
var dsa = x509.PublicKey.Key as DSACryptoServiceProvider;
if (dsa!=null)
valid = dsa.VerifySignature(data, signature);
else {
var rsa = x509.PublicKey.Key as RSACryptoServiceProvider;
if (rsa!=null)
valid = rsa.VerifyHash(data, ???, signature);
}
Ich weiß nicht, was soll ich stattdessen verwenden ???. Es ist möglich, hash-Algorithmus aus dem Zertifikat?
Können Sie klären, ob Sie möchten, um zu überprüfen, die Signatur des Zertifikats (der Emittent) oder die Signatur von Daten mit dem privaten Schlüssel, das Zertifikat?
Ich möchte, um zu überprüfen, signatue einige Daten (stringData).
Ich möchte, um zu überprüfen, signatue einige Daten (stringData).
InformationsquelleAutor Marat Faskhiev | 2010-07-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Absender der ursprünglichen Nachricht kann mit welchem Algorithmus er liebt es zu unterzeichnen, seine Nachricht unter Verwendung des privaten Schlüssels entspricht, das Zertifikat. Während Sie können den OID des verwendeten Algorithmus zum signieren der Zertifikat von der SignatureAlgorithm Eigenschaft, nichts verhindert, dass der Absender für die Verwendung unterschiedlicher Signaturen oder hashing-Algorithmus.
Entsprechend der Dokumentation, die nur gültige Hash-algorithmen für RSA-Anbieter sind SHA1 und MD5. Vielleicht sollten Sie versuchen, VerifyHash mit beiden algorithmen und überprüfen, welche man erfolgreich ist. Sie können die richtige OID für jede über die CryptoConfig.MapNameToOID Methode wie diese:
CryptoConfig.MapNameToOID("MD5");
für die zweite Zeile.Danke. Eine Bemerkung: ich verwenden muss VerifyData.
InformationsquelleAutor Panagiotis Kanavos