Haftungsausschluss: Ich kenne Java und Kryptographie, aber mein Wissen über C# und .NET ist sehr begrenzt. Ich schreibe hier nur unter dem Einfluss meiner Google-Fu-Fähigkeiten.
Unter der Annahme, dass Sie einen PKCS # 8-kodierten privaten RSA-Schlüssel entschlüsseln könnten, dann, von dem, was ich auf MSDN lesen, der Rest des Codes sollte wie folgt aussehen:
byte[] hv = MD5.Create().ComputeHash(data);
RSACryptoServiceProvider rsp = new RSACryptoServiceProvider();
RSAParameters rsp = new RSAParameters();
// here fill rsp fields by decoding pkcs8PrivateKey
rsp.ImportParameters(key);
RSAPKCS1SignatureFormatter rf = new RSAPKCS1SignatureFormatter(rsp);
rf.SetHashAlgorithm("MD5");
byte[] signature = rf.CreateSignature(hv);
Die entsprechenden Klassen sind in der System.Security.Cryptography
Namensraum.
Wie für die Schlüssel Blob Decodierung PKCS # 8 (d. H. Ausfüllen der Felder rsp
), fand ich this page, die ein Befehlszeilenprogramm in C# beschreibt, die diesen Job ausführen kann. Der Quellcode wird bereitgestellt und ist eine einzelne C# -Datei. Von dem, was ich darin gelesen habe, dekodiert dieser Code die PKCS # 8-Datei "manuell"; indirekt sollte dies bedeuten, dass Raw .NET (2.0) nicht über Funktionen für die PKCS # 8-Schlüsseldateidekodierung verfügt (andernfalls wäre der Autor dieses Tools nicht in die Schwierigkeiten geraten, eine solche Dekodierung zu implementieren). Für Ihre anstehende Aufgabe können Sie die benötigten Teile aus dieser Quelldatei aufspüren und alles über PEM und symmetrische Verschlüsselung überspringen. Ihr Einstiegspunkt wäre die DecodePrivateKeyInfo()
-Funktion, die offensichtlich eine DER-codierte unverschlüsselte PKCS # 8-Datei erwartet, genau wie Javas PKCS8EncodedKeySpec
.
etwas off-topic, aber wenn möglich, sollten Sie mit MD5 in beliebigen Anwendungen auf jeden Fall vermeiden – Krystian
‚Soll‘ ist ein starkes Wort, auch wenn MD5 schwach erwiesen ist, dass sie leicht gebrochen werden kann (siehe http : //merlot.usc.edu/csac-f06/papers/Wang05a.pdf, wie von Wikipedia referenziert) es ist nicht immer Sache des Programmierers zu entscheiden. :-) – Patrick
@Krystian, es war eine Entscheidung von wem die Schnittstelle vor 6 Jahren gebaut :) – balint