2009-05-28 6 views
3

Ich habe einen öffentlichen/privaten Schlüssel mit RSACryptoServiceProvider erstellt und als XML gespeichert. Ich kann damit Daten in .NET verschlüsseln/entschlüsseln/signieren und verifizieren.Kann ich öffentliche/private RSACryptoServiceProvider-Schlüssel verwenden, um mit Crypto ++ zu interagieren?

Ich habe eine andere Anwendung, die auf einem Linux-Server ausgeführt werden soll. Ich entwickle es in C++ und ich benutze Crypto ++ für meine Kryptographie-Bedürfnisse.

Ich möchte Daten zwischen diesen beiden Anwendungen freigeben, aber dazu muss ich die RSAParameters in öffentliche/private Schlüssel konvertieren, die Crypto ++ verstehen kann.

Ich bin auch offen für die Verwendung konvertieren öffentlichen/privaten Schlüsseln von Crypto ++ in RSAParameters generiert, wenn es einfacher zu tun ist.

Irgendwelche Ideen?

Antwort

2

Der einfachste Weg ist wahrscheinlich, die RSAParameters direkt zu verwenden, anstatt über XML zu gehen.

Speichern Sie einfach die in den RSAParameters enthaltenen Byte-Arrays in einer Datei in einem Format Ihrer Wahl. Lesen Sie die Byte-Arrays zurück in Ihrem C++ - Programm und erstellen Sie CryptoPP::Integer s von ihnen. Verwenden Sie diese Ganzzahlen, um eine RSAFunction (öffentlicher Schlüssel) oder InvertibleRSAFunction (privater Schlüssel) zu initialisieren.

Der umgekehrte Weg ist ähnlich: i.e.

RSAFunction publicKey = ...; 

size_t modulusLength = publicKey.getModulus().ByteCount(); 
unsigned char * modulus = new unsigned char[modulusLength]; 
publicKey.getModulus().Encode(modulus, modulusLength); 

// similarly with PublicExponent and remember to clean up the arrays. 

und übertragen Sie die Felder in Ihre .NET-Anwendung, wo Sie sie eine RSAParameters initialisieren können.

+0

Ich wusste, dass es für jemanden einfach trivial wäre ... Habe es gestern funktioniert, indem ich den privaten Schlüssel im PKCS # 8 Format und den öffentlichen Schlüssel im X509 Format gepackt habe. Ich denke, dein Weg wäre einfacher gewesen. – Christo

Verwandte Themen