![](/img/trans.png)
[英]How to encrypt a string using OpenSSL C library and a public key file?
[英]How to send and then encrypt a message using OpenSSL public key via socket in C?
我正在使用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());
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?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.