我遇到有关OpenSSL和dotnet加密的问题。我想将OpenSSL生成的RSA公钥和私钥转换为dotnet。然后该密钥用于进一步的操作。出于安全原因,使用外部密钥库或密钥文件不是解决方案。我已经包含了我必须使用的旧cpp代码的一小部分,并标记了两行,我认为可以导出密钥。 RSA密钥结构来自一个外部PKI服务器。事实上,PKI服务器在发送消息时为所选用户提供一系列公钥。每个用户的私钥始终存储在本地。可以帮助我吗?
非常感谢你的帮助
沃尔克
############## start code ##############
typedef struct _KEY_POINT
{
unsigned short size;
unsigned short key_size;
unsigned long crc;
unsigned char key_data[1];
} KEY_POINT, * PKEY_POINT;
unsigned char * encryptRSA( const unsigned char * pSrcBuffer,
unsigned long * pBufferSize,
const PKEY_POINT pPublicKey)
{
RSA * pRsa = NULL;
// -----snip ----------------
unsigned char * pPublic_data = pPublicKey->key_data;
pRsa = d2i_RSAPublicKey(&pRsa, (const unsigned char **)&pPublic_data, pPublicKey->key_size);
// Here chance to export *pRsa as .net public keye e.g. as string (base 64 encoded)
// -----snip ----------------
}
unsigned char * decryptRSA( const unsigned char * pSrcBuffer,
unsigned long * pBufferSize,
const PKEY_POINT pPrivateKey)
{
RSA * pRsa = NULL;
// -----snip ----------------
unsigned char * pPublic_data = pPublicKey->key_data;
pRsa = d2i_RSAPrivateKey(&pRsa, (const unsigned char **)&pPublic_data, pPublicKey->key_size);
// Here chance to export *pRsa as .net private key e.g. as string (base 64 encoded)
// -----snip ----------------
}
############## end code ##############
答案 0 :(得分:0)
由于你有DER格式的数据(我假设你使用d2i_RSAXXX),也许你可以使用base64函数http://www.ioncannon.net/programming/34/howto-base64-encode-with-cc-and-openssl/。
这也假定.Net可以读取DER格式的公钥和私钥。