我正在尝试编写一个简单的 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”
所以我的第一个问题是,导出生成的公钥的最佳方法是什么?