Posso usar chaves RSACryptoServiceProvider públicas / privadas para interoperabilidade com Crypto ++?
-
06-09-2019 - |
Pergunta
Eu criei uma chave pública / privada usando RSACryptoServiceProvider e salva-lo como XML. Posso usar este para criptografar / descriptografar / assinar e verificar dados em .NET.
Eu tenho uma outra aplicação que se destina a ser executado em um servidor Linux. Estou desenvolvendo-o em C ++ e estou usando Crypto ++ para minhas necessidades de criptografia.
Eu quero compartilhar dados entre estas duas aplicações, mas para isso eu preciso converter os RSAParameters em chaves públicas / privadas que Crypto ++ pode entender.
Eu também estou aberto a usando / chaves públicas convertido privados gerados pela Crypto ++ em RSAParameters se é mais fácil de fazer.
Todas as idéias?
Solução
A maneira mais fácil é provavelmente usar as RSAParameters diretamente em vez de ir sobre XML.
Apenas armazenar o byte de matrizes contidas nos RSAParameters em um arquivo usando um formato de sua própria escolha. Leia o byte de matrizes de volta em seu programa C ++ e criar CryptoPP :: Integer é a partir deles. Use estes inteiros para inicializar um RSAFunction (chave pública) ou InvertibleRSAFunction (chave privada).
O caminho inverso é semelhante:. I
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 transferir as matrizes para o .NET do aplicativo, onde você pode usá-los para inicializar um RSAParameters.