2017-01-08 3 views
1

Ich versuche, einen Text zu entschlüsseln, die mit RSA, ich habe den öffentlichen Schlüssel, dies zu tuninitialisieren RSA von String

`

-----BEGIN RSA PUBLIC KEY----- 
MIGWAoGBAMqfGO9sPz+kxaRh/qVKsZQGul7NdG1gonSS3KPXTjtcHTFfexA4MkGA 
mwKeu9XeTRFgMMxX99WmyaFvNzuxSlCFI/foCkx0TZCFZjpKFHLXryxWrkG1Bl9+ 
+gKTvTJ4rWk1RvnxYhm3n/Rxo2NoJM/822Oo7YBZ5rmk8NuJU4HLAhAYcJLaZFTO 
sYU+aRX4RmoF 
-----END RSA PUBLIC KEY----- 

`

Wie kann ich diese laden verschlüsselt ist in RSACryptoServiceProvider, weil dies nur von XMLString geladen werden kann und ich nicht weiß, wie man dies in Xml-Format

konvertiert Die Schlüsselgröße ist 128

Ich versuchte es mit dem folgenden Code

public byte[] Decrypt128(byte[] input) 
{ 
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(128); 
    rsa.ImportCspBlob(Encoding.ASCII.GetBytes(_longKey)); 
    return rsa.Decrypt(input, true); 
} 

_longKey ist der Inhalt zwischen BEGIN und END und auch der BEGIN und END einschließlich zu initialisieren, bietet Bad Version of provider.

Dies ist kein Duplikat Frage der How do you convert Byte Array to Hexadecimal String, and vice versa?

Ich weiß bereits, wie man Byte in Hex und Hex in Byte umwandelt, aber das hilft mir in keiner Weise bei der Initialisierung RSACryptoServiceProvider vielleicht gib mir ein Beispiel, wie das helfen würde, aber an dieser Stelle ist es nicht

+0

Mögliches Duplikat [? Wie konvertieren Byte-Array zu Hexadezimal String, Sie und umgekehrt] (http: // Stackoverflow. com/fragen/311165/how-do-you-conv ert-byte-array-zu-hexadezimal-zeichenfolge-und-umgekehrt) –

+0

Ich bin nicht sicher, wie dies ein mögliches Duplikat ist, wenn ich 'RSACryptoServiceProvider' mit dem öffentlichen Schlüssel –

+0

initialisieren muss Der Inhalt zwischen BEGIN und END sind wahrscheinlich eine hexadezimale Zeichenfolge, oder noch wahrscheinlicher eine [Base64] (http://stackoverflow.com/questions/7134837/how-doi-i-code-a-base64-encoded-string). Also Encoding.GetBytes wird nicht funktionieren. –

Antwort

2

könnten Sie BouncyCastle verwenden das ein PemReader so dass Sie das Modul extrahieren und Exponenten für den Schlüssel:

using (var reader = File.OpenText("mykey.key")) 
{ 
    var pem = new PemReader(reader); 
    var o = (RsaKeyParameters)pem.ReadObject(); 
    using (var rsa = new RSACryptoServiceProvider()) 
    { 
     var parameters = new RSAParameters(); 
     parameters.Modulus = o.Modulus.ToByteArray(); 
     parameters.Exponent = o.Exponent.ToByteArray(); 
     rsa.ImportParameters(parameters); 

     // Do what you need to do with the RSACryptoServiceProvider instance 
    } 
} 

Wenn Sie eine Abhängigkeit von BouncyCastle in Ihrem Projekt nicht haben wollen, einmal geladen die öffentliche Schlüssel in die RSACryptoServiceProvider diese Methode Sie es in XML für eine spätere Verwendung exportieren könnte:

string xml = rsa.ToXmlString(false); 
File.WriteAllText("mykey.xml", xml); 
+0

Ich denke, das könnte nur funktionieren, ich habe meine Frage mit dem öffentlichen Schlüssel aktualisiert, ich denke, es kann kaputt sein oder etwas, das es perfekt lädt, aber ImportParameters gibt 'Bad Data' –

+0

Ich kann nicht den tatsächlichen öffentlichen Schlüssel, der Bad Data in Ihrem verursacht Frage. –

+0

Nur hinzugefügt, es musste es neu formatieren –

Verwandte Themen