Frage

Ich bin kein Krypto-Experte, aber wie ich es verstehe, 3DES ist ein symmetrischer Verschlüsselungsalgorithmus, das heißt, es öffentliche / private Schlüssel verwenden tut.

Dennoch habe ich mit Verschlüsselung von Daten unter Verwendung eines öffentlichen Schlüssels (insbesondere eine CER-Datei) beauftragt. Wenn Sie den ganzen symmetrischen / asymmetrischen thang ignorieren, soll ich nur in der Lage sein, die wichtigsten Daten aus dem öffentlichen Schlüssel als TripleDES Schlüssel zu verwenden. Aber ich habe Schwierigkeiten, die Schlüsselbytes aus der CER-Datei zu extrahieren. Dies ist der Code, wie es steht ..

TripleDESCryptoServiceProvider cryptoProvider = new TripleDESCryptoServiceProvider();
X509Certificate2 cert = new X509Certificate2(@"c:\temp\whatever.cer");
cryptoProvider.Key = cert.PublicKey.Key.

Die einfachste Methode, die ich finden kann, das rohe Schlüsselbytes aus dem Zertifikat zu extrahieren ist ToXmlString (bool), und dann einig Hacky substringing auf der zurückgegebene Zeichenfolge zu tun. Dies ist jedoch so hackish scheint, ich glaube, ich muß eine einfachere, offensichtliche Weise fehlen, es zu tun.

Fehle ich eine einfachere Art und Weise eine CER-Datei zu verwenden, um die Schlüsseldaten zu der C # 3DES Crypto-Klasse zur Verfügung zu stellen, oder ist es aus dem Zertifikat XML-String Hacking wirklich den besten Weg, um dies zu realisieren?

War es hilfreich?

Lösung

cryptoProvider.Key = cert.GetPublicKey ()?

Andere Tipps

Es ist keine gute Idee, Schlüssel für die asymmetrische Kryptografie für symmetrische Kryptographie erzeugt zu verwenden. Es gibt nichts, was man aus kommen mit einer Art und Weise der Verwendung eines öffentlichen Schlüssels als Verschlüsselungsschlüssel für 3DES zu verhindern, aber das Endergebnis wird sein, dass jeder Zugriff auf den öffentlichen Schlüssel mit (und das bedeutet, jeden!) In der Lage, Ihren verschlüsselten Text zu entschlüsseln .

Encrypting große Mengen von Daten mit asymmetrischer Kryptographie ist nicht der Weg zu gehen. Stattdessen die Daten mit einem symmetrischen Algorithmus verschlüsselt und verschlüsselt den symmetrischen Schlüssel (und IV) mit dem öffentlichen Schlüssel.

Diese Seite von MSDN wirklich habe ich geholfen, mit .Net symmetrischer Kryptographie in Gang bringen.

Das eigentliche Problem hier ist, dass der öffentliche Schlüssel ist, na ja, Öffentlichkeit . Bedeutung frei verfügbar, was bedeutet, es bietet keine Sicherheits der Verschlüsselung.

Heck, jemand auf diesen Thread hat alle Informationen, die sie brauchen, um alles zu entschlüsseln. So tun Googler.

Bitte versuchen Sie Ihre Benutzer zu ermutigen, nicht öffentliche Schlüssel Daten wie das zu verwenden. Am allerwenigsten, bekommen sie ein Passwort geben oder eine anderen leicht-more-secure chunk Sie verwenden können, einen einheitlichen Schlüssel zu erzeugen.

Eine weitere Sache. Zertifikatsschlüssel variieren in der Größe. Es kann wohl Griff zusätzliche Bytes im Schlüssel wegzuwerfen, aber Sie werden wahrscheinlich ein Array Index / Out Of Bounds Ausnahme, wenn der Schlüssel kürzer als die 3DES-Schlüssel muss passiert. Ich bezweifle, dass das passieren wird, 3DES nur 56bits braucht, und cert Tasten sind fast immer 256bit oder größer ist.

Ich denke, was Sie vermissen ist die Bytes aus dem String Umwandlung der Schlüssel-Bytes enthalten.

Hoffe, dass die Methode FromBase64String wird Ihnen helfen:

byte[] keyBytes = Convert.FromBase64String(sourceString);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top