1

単一のサーバーと潜在的に多くのクライアント間の小さなメッセージを暗号化するための単純な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」など

だから私の最初の質問は、生成された公開鍵をエクスポートするための最良の方法は何ですか?

4

1 に答える 1

1

スタックに割り当てられたバッファへのポインタを返しています。このバッファは、関数が戻るときに上書きされます。試すbuf = new unsigned char[1024];

于 2013-01-14T23:10:30.880 に答える