2016-08-19 7 views
-1

Die Schlüsselaustausch-Methode ist: RSA-PKCS1-KeyExBad Key Exception RSACryptoServiceProvider

Ich denke also nicht, dass die Antworten in ähnlichen Fragen gelten, und ich habe keine Kontrolle über das Zertifikat - es ist gültig und sollte arbeiten.

.NET Framework 3.5

Der Code:

 RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PublicKey.Key; 
     byte[] bytestodecrypt = Convert.FromBase64String(SignatureValue); 
     byte[] plainbytes = rsa.Decrypt(bytestodecrypt, false); 

Screenshots des Attributs des rsa Objekts:

enter image description here

+1

Wie wurde die Signatur generiert? –

+2

Wenn Sie ein Problem mit Ihrem Code haben, sollten Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) bereitstellen, das Ihr Problem veranschaulicht. Hilf uns, dir zu helfen, ohne Zeit mit Raten zu verschwenden. –

+2

Da es sich um eine Signatur handelt, ist 'RSACryptoServiceProvider # Decrypt' eine falsche Methode dafür. Sie müssen 'RSACryptoServiceProvider # VerifyData' verwenden. –

Antwort

1

Während RSA beide Signaturen tun kann und Verschlüsselung, sie kann nicht synonym verwendet werden (außer bei der rohen/"no padding" Version des Algorithmus, die .NET nicht unterstützt; und selbst dann Schlüssel sind "rückwärts").

Das Signatur-Blob wird durch "Verschlüsseln" mit dem privaten Schlüssel berechnet. Es wird durch den öffentlichen Schlüssel "entschlüsselt" und dann vergleicht das zugrundeliegende System es mit dem bereitgestellten Hash- und Hash-Algorithmus. Wenn beide übereinstimmen, wird der Wert true zurückgegeben. Andernfalls wird false zurückgegeben (oder es wird eine Ausnahme ausgelöst, wenn es wirklich durcheinander gebracht wird).

Also lieber als rsa.Decrypt(signature, false) wollen Sie rsa.VerifyHash(hash, signature, hashAlgorithm, RSASignaturePadding.Pkcs1), die einen Bool zurückgibt.

Die "Bad Key" -Ausnahme ist, weil Sie nur einen öffentlichen Schlüssel (der für Verify ausreicht), aber Entschlüsselung (die den privaten Schlüssel benötigt).

+0

Dies ist die Antwort auf das Problem, das ich angegeben habe. Ich habe immer noch Probleme damit, einen Hash der Signaturfelder zu erzeugen, der dem entspricht, was der Provider berechnet, aber ich werde das durcharbeiten. – user2709214

+0

Dies ist vollständig gelöst. Vielen Dank – user2709214

Verwandte Themen