Signieren der Daten mit MD5WithRSA aus .Pem/.Pkcs8 keyfile in C#
Ich habe die folgende code-Beispiel in Java, und ich muss mich wieder verabschieden, die es in C#:
PKCS8EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(pkcs8PrivateKey);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privKey = keyFactory.generatePrivate(privKeySpec);
Signature sign = Signature.getInstance("MD5withRSA");
sign.initSign(privKey);
sign.update(data);
byte[] signature = sign.sign();
Ist es möglich mit dem standard .Netto-Crypto-API, oder sollte ich BouncyCastle?
Danke,
b.
- etwas off-topic, aber wenn möglich, sollten Sie auf jeden Fall vermeiden Sie die Verwendung von MD5 in beliebigen Anwendungen
- 'Sollte' ist ein starkes Wort, auch wenn MD5 wurde, erwies sich als schwach, dass es leicht kaputt (siehe merlot.usc.edu/csac-f06/papers/Wang05a.pdf, als verwiesen wird, die von Wikipedia) es ist nicht immer am Programmierer zu entscheiden. 🙂
- es war eine Entscheidung, die von denen gebaut, die Schnittstelle vor 6 Jahren:)
- Ich kann Total verstehen, dass, das ist, warum ich sagte auch "wenn möglich" @balint: ich ahnte so... 🙂
- Jungs, ich kann nicht markieren Sie die Fragen als die Antworten... was ist passiert?:D
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich ein sehr ähnliches problem versuchen, um eine native C# - tool für die Verpackung Chrome-Erweiterungen (mit SHA1, nicht MD5, aber das ist kein großer Unterschied). Ich glaube, ich habe versucht, buchstäblich jede mögliche Lösung für .Net: System.Sicherheit.Kryptographie, BouncyCastle, OpenSSL.Net und Chilkat RSA.
Die beste Lösung ist wahrscheinlich Chilkat; Ihre Oberfläche ist die sauberste und einfachste, es ist gut unterstützt und gut dokumentiert, und es gibt Millionen Beispiele. Zum Beispiel, hier ist etwas code, mit Ihrer Bibliothek, die etwas tut, sehr nahe an dem, was Sie wollen: http://www.example-code.com/csharp/rsa_signPkcs8.asp. Jedoch, es ist nicht kostenlos (obwohl $150 ist nicht unvernünftig, zu sehen, wie ich die gebrannt haben 2 Tage lang versucht, dies herauszufinden, und ich mache ein bisschen mehr als $75 pro Tag!).
Als Kostenlose alternative, JavaScience bietet eine Reihe von Schlüssel-Dienstprogramme in source-form für mehrere Sprachen (inklusive C#/.Net)http://www.jensign.com/JavaScience/cryptoutils/index.html. Die markanteste, was Sie versuchen zu tun, ist opensslkey (http://www.jensign.com/opensslkey/index.html), die Sie generieren einen RSACryptoServiceProvider aus .pem-Datei. Danach können Sie mit diesem Anbieter anmelden den code:
System.Security.Cryptography
.Andere Möglichkeit ist die Verwendung von CNG (Cryptography Next Generation), zusammen mit der Sicherheit.Kryptographie DLL von CodePlex
Dann können Sie schreiben:
Aktualisiert, vielen Dank an Simon Mourier: mit .Net 4.6, die Sie nicht mehr benötigen eine separate Bibliothek
Diese Frage ALSO Antworten der PKCS#8-Teil des Codes. Der rest des .NETTO-RSA-Klassen sind ein bizarres Durcheinander von teilweise sich überlappenden Klassen, die sind sehr schwer zu ergründen. Es sicher scheint, dass Signatur-Unterstützung ist in den RSACryptoServiceProvider und/oder RSAPKCS1SignatureFormatter Klassen.
Haftungsausschluss: ich weiß, Java und Kryptographie, aber meine Kenntnisse in C# und .NETZ ist sehr begrenzt. Ich Schreibe hier nur unter dem Einfluss von mein Google-fu-Fähigkeiten.
Unter der Annahme, dass Sie Dekodieren konnte eine PKCS#8-kodierte private RSA-Schlüssel, dann, von was ich gelesen habe auf der MSDN-Website, der rest des Codes sollte wie folgt Aussehen:
Den relevanten Klassen sind in der
System.Security.Cryptography
namespace.Als für die PKCS#8-Schlüssel blob-Decodierung (d.h. das ausfüllen des
rsp
Felder), fand ich auf dieser Seite beschreibt ein Befehlszeilen-Dienstprogramm in C#, die ausführen können, dass job. Der source code wird zur Verfügung gestellt und ist eine einzige C# - Datei. Von dem, was ich in ihm Lesen, dass code, der decodiert die PKCS#8-Datei "manuell"; indirekt, das sollte bedeuten, dass raw .NET (2.0) nicht über Einrichtungen für PKCS#8-Schlüssel-Datei Dekodieren (sonst der Autor, das tool würde nicht haben ging auf die Schwierigkeiten der Umsetzung einer solchen Dekodierung). Für Ihre Aufgabe bei der hand, Sie könnte Aufräumen von Quellcode-Datei die Teile, die Sie benötigen, überspringen Sie nichts über die PEM-und die symmetrische Verschlüsselung; ist Ihr Einstiegspunkt wäre dieDecodePrivateKeyInfo()
Funktion, die offenbar erwartet, dass ein DER-kodiertes unverschlüsselt PKCS#8-Datei, genau wie Java istPKCS8EncodedKeySpec
.Können Sie diesen code verwenden . Bei der ersten sollten Sie den download "BouncyCastle.Crypto.dll" aus http://www.bouncycastle.org/csharp/ .