如何在C中通过套接字使用OpenSSL公钥发送并加密消息?
我正在使用C和本地套接字编写一个简单的服务器和客户端程序。我已使用openSSL成功生成公钥和私钥,代码如下:如何在C中通过套接字使用OpenSSL公钥发送并加密消息?,c,sockets,encryption,openssl,C,Sockets,Encryption,Openssl,我正在使用C和本地套接字编写一个简单的服务器和客户端程序。我已使用openSSL成功生成公钥和私钥,代码如下: int generateKeys(char* publicDest, char* privateDest) { RSA *keypair = RSA_generate_key(2048, 3, NULL, NULL); BIO *pri = BIO_new(BIO_s_mem()); BIO *pub = BIO_new(BIO_s_mem());
int generateKeys(char* publicDest, char* privateDest) {
RSA *keypair = RSA_generate_key(2048, 3, NULL, NULL);
BIO *pri = BIO_new(BIO_s_mem());
BIO *pub = BIO_new(BIO_s_mem());
PEM_write_bio_RSAPrivateKey(pri, keypair, NULL, NULL, 0, NULL, NULL);
PEM_write_bio_RSAPublicKey(pub, keypair);
size_t pri_len = BIO_pending(pri);
size_t pub_len = BIO_pending(pub);
char *pri_key = malloc(pri_len + 1);
char *pub_key = malloc(pub_len + 1);
BIO_read(pri, pri_key, pri_len);
BIO_read(pub, pub_key, pub_len);
pri_key[pri_len] = '\0';
pub_key[pub_len] = '\0';
strcpy(publicDest, pub_key);
strcpy(privateDest, pri_key);
}
我现在需要将公钥发送到客户机,以便他们能够为服务器加密消息。我的做法如下:
char publicKey[2048];
char privateKey[2048];
generateKeys(publicKey, privateKey);
write(clientSocket, publicKey, 2048);
首先,这是向客户端发送公钥的正确方法吗
这就是我现在遇到的问题,如何仅使用公钥在客户端加密消息?可能吗
编辑-这是我试图加密消息的客户端上的代码:
char dest[2048];
BIO *pubBio = BIO_new_mem_buf(publicKey, -1);
RSA *pubRSA = PEM_read_bio_RSA_PUBKEY(pubBio, NULL, NULL, NULL);
if(!pubRSA) {
printf("Issue loading public key...");
}
RSA_public_encrypt(sizeof(sigMessage), sigMessage, dest, pubRSA, RSA_PKCS1_PADDING);
我的问题是无法以这种方式加载公钥
首先,这是向客户端发送公钥的正确方法吗
不,这甚至不是保存钥匙的有效方法。对二进制数据使用strcpy()
无效。您应该使用memcpy()。
如何仅使用公钥在客户端加密消息
您需要显示一些代码以供注释
可能吗
当然,但是为什么呢?为什么不使用SSL/TLS
首先,这是向客户端发送公钥的正确方法吗
不,这甚至不是保存钥匙的有效方法。对二进制数据使用strcpy()
无效。您应该使用memcpy()。
如何仅使用公钥在客户端加密消息
您需要显示一些代码以供注释
可能吗
当然,但是为什么呢?为什么不使用SSL/TLS?我已经更新了代码,以显示客户端加密问题,而不是您如何接收公钥。必须假定加载数据的数据不正确,因此如何获取该数据至关重要。在任何情况下,您都应该在此处发布一个完全可复制的问题。我已经更新了代码以显示客户端加密问题,但没有显示您是如何接收公钥的。必须假定加载数据的数据不正确,因此如何获取该数据至关重要。在任何情况下,你都应该在这里发布一个完整的可复制问题。