単一のサーバーと潜在的に多くのクライアント間の小さなメッセージを暗号化するための単純なRSA暗号化スキームを作成しようとしています。
私が思いついた計画は、クライアントに鍵ペアを生成させ、公開鍵をサーバーに送信させることです。サーバーには、ソケットと公開鍵を格納するオブジェクトがあります。メッセージを送信するときになると、サーバーはクライアントオブジェクトのメソッドを呼び出し、メッセージを暗号化してクライアントに送信します。
クライアントに送信されるメッセージのみを暗号化するので、キーの完全なトランザクションについて心配する必要はありません。
私はそれをかなりよく理解していると思います。
問題は、RSAの2つの異なる実装を接続しようとすることから生じています。サーバーはC#で記述されており、クライアントはCを使用するMetaTraderクライアントです。OpenSSLを使用してギャップを埋めることに決めましたが、これまでのところ、クライアントでキーを生成することはできませんでした。私はc#用のopensslラッパー(http://openssl-net.sourceforge.net/)を使用しており、MetaTrader用の非常に基本的なラッパーdllを作成しようとしています。これまでのところ、GenerateRSAKeysとDecryptRSAの2つの関数が含まれています。
今のところ、公開鍵を含むPEM形式の文字列を作成したいと思います。これは、GenerateRSAKeys()についてこれまでに持っているものです。
extern "C" unsigned char *__stdcall GenerateRSAKeys (){
int len;
unsigned char *buf = new unsigned char[1024];
rsa = RSA_generate_key(512,RSA_F4,NULL,NULL);
len=i2d_RSAPublicKey(rsa, &buf);
return buf;}
現在、サーバーにbufを送信すると、1文字が表示されます。「X」など
だから私の最初の質問は、生成された公開鍵をエクスポートするための最良の方法は何ですか?