Posso usare RSACryptoServiceProvider chiavi pubbliche / private per interoperabilità con Crypto ++?
-
06-09-2019 - |
Domanda
Ho creato una chiave pubblica / privata utilizzando RSACryptoServiceProvider e salvato in formato XML. Posso usare questo per cifrare / decifrare / firmare e verificare i dati in .NET.
Ho un'altra applicazione che è destinato per l'esecuzione su un server Linux. Sto sviluppando in C ++ e sto usando Crypto ++ per le mie esigenze di crittografia.
Voglio condividere i dati tra le due applicazioni, ma per farlo ho bisogno di convertire i RSAParameters in chiavi pubbliche / private che Crypto ++ può capire.
Sono anche aperti a utilizzare convertire le chiavi pubbliche / private generate da Crypto ++ in RSAParameters se è più facile da fare.
Tutte le idee?
Soluzione
Il modo più semplice è probabilmente quello di utilizzare i RSAParameters direttamente invece di andare su XML.
Basta memorizzare i byte-array contenuti nelle RSAParameters in un file con un formato di vostra scelta. Leggi i byte-array di nuovo nel vostro programma C ++ e creare cryptopp :: Integer s da loro. Utilizzare i numeri interi per inizializzare un RSAFunction (chiave pubblica) o InvertibleRSAFunction (chiave privata).
Il modo inverso è simile: cioè
.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.
e trasferire gli array alla vostra NET-applicazione, in cui è possibile utilizzare per inizializzare un RSAParameters.