1

我正在尝试编写一个简单的 RSA 加密方案来加密单个服务器和可能的许多客户端之间的小消息。

我想出的计划是让客户端生成一个密钥对并将公钥发送到服务器。服务器有一个存储套接字和公钥的对象。当需要发送消息时,服务器将调用 Client 对象中的一个方法,该方法将加密消息并将其发送给客户端。

我只会加密发送到客户端的消息,所以我不需要担心密钥的完整交易。

我想我已经很清楚了。

问题来自于尝试连接两种不同的 RSA 实现。服务器是用 C# 编写的,客户端是使用 C 的 MetaTrader 客户端。我决定使用 OpenSSL 来尝试弥合差距,但到目前为止我还无法在客户端上生成密钥。我正在为 c# ( http://openssl-net.sourceforge.net/ ) 使用 openssl 包装器,并且我正在尝试为 MetaTrader 编写一个非常基本的包装器 dll。到目前为止,它包含两个函数,GenerateRSAKeys 和 DecryptRSA。

现在,我只想生成一个包含公钥的 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 发送到服务器时,我收到一个字符。比如“X”

所以我的第一个问题是,导出生成的公钥的最佳方法是什么?

4

1 回答 1

1

您正在返回一个指向堆栈上分配的缓冲区的指针;当函数返回时,这个缓冲区将被覆盖。尝试buf = new unsigned char[1024];

于 2013-01-14T23:10:30.880 回答