2011-07-26 11 views
1

OpenSSLとドットネットの暗号化に問題があります。私は、OpenSSLで生成されたRSA公開鍵と秘密鍵をドットネットに変換したいと考えています。このキーは、その後のアクションに使用されます。セキュリティ上の理由から、外部キーストアまたはキーファイルの使用は解決策ではありません。私は使用しなければならない古いcppコードの小さな部分を含めて、キーをエクスポートすることができると思うところに2行をマークしました。 RSA鍵構造は、外部PKIサーバから来ます。実際、PKIサーバーは、メッセージを送信するときに、選択されたユーザーに公開キーの配列を配信します。各ユーザーの秘密鍵は常にローカルに格納されます。誰かが私を助けることができますか?OpenSSL(cpp)と.net RSA鍵交換

どうもありがとうあなたの助けを

フォルカー

############## 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

あなたは(あなたがd2i_RSAXXXを使用するので、私はこれを仮定)DER形式のデータを持っているので、多分あなたはbase64で機能を使用することができ、http://www.ioncannon.net/programming/34/howto-base64-encode-with-cc-and-openssl/

これはまた、.NetがDER形式の公開鍵と秘密鍵を読み取ることができると仮定しています。