2015-10-23 15 views
5

Ich versuche, eine Online-Datenbankanwendung mit PHP für den Server und C# -Formular-Anwendung für den Client zu erstellen. Auf dem Server verschlüssele ich eine einfache Zeichenfolge mit einem öffentlichen RSA-Schlüssel mit der PHPSecLib. Dann empfängt die C# -Anwendung die Zeichenfolge und versucht, sie mithilfe des entsprechenden privaten Schlüssels zu entschlüsseln. Die Bytes sind Base64-codiert auf dem Server und durch C# wieder in Bytes decodiert. Ich habe das Schlüsselpaar mit der PHPSecLib erstellt.System.IO.IOException: ----- END RSA PRIVATE KEY nicht gefunden

Dies ist der Code, den ich auf der Client-Anwendung verwenden:

public string rsa_decrypt(string encryptedText, string privateKey) { 
     byte[] bytesToDecrypt = Convert.FromBase64String(encryptedText); 
     Pkcs1Encoding decrypter = new Pkcs1Encoding(new RsaEngine()); 
     //the error occurs on this line: 
     AsymmetricCipherKeyPair RSAParams = (AsymmetricCipherKeyPair)new PemReader(new StringReader(privateKey)).ReadObject(); 

     decrypter.Init(false, RSAParams.Private); 
     byte[] decryptedBytes = decrypter.ProcessBlock(bytesToDecrypt, 0, bytesToDecrypt.Length); 
     string decryptedString = Convert.ToBase64String(decryptedBytes); 
     return decryptedString; 
    } 

Aber ich erhalte die folgende Störung auf der Linie oben^angegeben.

Eine nicht behandelte Ausnahme des Typs 'System.IO.IOException' aufgetreten in BouncyCastle.Crypto.dll

Zusätzliche Informationen: ----- END RSA PRIVATE KEY nicht

gefunden Ich glaube, es gibt nichts Falsches an der Schlüsselpaarkombination, da ich einen Fehler bekomme, bevor ich überhaupt versuche, etwas zu entschlüsseln. Der privateKey Parameter wird derzeit in das Skript fest einprogrammiert dieses Format:

string privateKey = "-----BEGIN RSA PRIVATE KEY-----XXXXXXXX-----END RSA PRIVATE KEY-----"; 

So scheint es mir, die Fußzeile tatsächlich im String enthalten ist ... Ich habe gedebuggt und überall gegoogelt, aber ich kann nicht scheinen zu löse es. Ich bin ziemlich neu in RSA & Bouncycastle, vielleicht verwende ich nur falsche Methoden.

Hoffe, du kannst helfen, danke! - G4A

P.S. Dies ist meine erste Stackoverflow-Frage, ich habe gerade einen Account erstellt, also könntest du mir auch ein Feedback geben, wie ich diese Frage formuliert habe; groß!

+2

IIRC Sie benötigen eine Linie zwischen der Pre-Eb Grenze; '" ----- BEGIN RSA PRIVATE KEY ----- \ r \ nXXXXXXXX \ r \ n ----- ENDE RSA PRIVATE KEY ----- "' –

+1

Willkommen zu SO, G4A! Es ist nicht viel falsch mit der Frage, gute Frage, ausgezeichnete Formatierung. Vier Dinge zur weiteren Verbesserung: 1) end mit einer eigentlichen Frage (weißt du, was mit einem Fragezeichen endet) 2) die "Hoffe du kannst helfen, danke! -4GA" ist nicht erforderlich und eigentlich nicht bevorzugt 3) die PS sollte ein Kommentar unter der Frage sein und 4) bitte versuchen Sie es uns, indem Sie z AlexK. wenn er eine Lösung vorschlägt (von der er sich nicht sicher ist, daher der Kommentar anstelle der Antwort). –

+1

Das hat den Trick @AlexK.! Ich habe es tatsächlich schon versucht, aber ich habe die Wagenrückgabe vergessen. Könntest du bitte deinen Kommentar löschen und daraus eine Antwort machen, damit ich dir Karma geben kann, oder wie es auch heißen mag. Und danke @Maarten Bodewes Ich werde mich daran erinnern. Und schließlich, Entschuldigung für die späte Antwort; Ich denke, meine E-Mail ist noch nicht richtig eingerichtet. – G4A

Antwort

6

Sie benötigen eine neue Linie zwischen dem Pre/Post-Kapselung Grenze Text und die Base64-Daten hinzuzufügen, so:

string privateKey = "-----BEGIN RSA PRIVATE KEY-----\r\nXXX\r\n-----END RSA PRIVATE KEY-----"; 

Dies liegt daran, die pem Spezifikation für die Existenz anderer Textüberschriften zwischen den beiden erlaubt .

+1

Profi-Tipp - Stellen Sie sicher, dass Sie kein wortwörtliches String-Literal ('@" ... "') verwenden, das die Escape-Sequenzen '\ n' und' \ r' ignoriert. –

Verwandte Themen