c++ 实现公钥加密 私钥解密
时间: 2023-08-02 17:08:16 浏览: 66
C++ 可以使用 OpenSSL 库来实现公钥加密和私钥解密。以下是一个简单的示例代码:
```c++
#include <openssl/rsa.h>
#include <openssl/pem.h>
int main() {
// 生成 RSA 密钥对
RSA *keypair = RSA_generate_key(2048, RSA_F4, nullptr, nullptr);
// 保存公钥和私钥到文件
FILE *pubkey_file = fopen("public.pem", "w");
PEM_write_RSA_PUBKEY(pubkey_file, keypair);
fclose(pubkey_file);
FILE *privkey_file = fopen("private.pem", "w");
PEM_write_RSAPrivateKey(privkey_file, keypair, nullptr, nullptr, 0, nullptr, nullptr);
fclose(privkey_file);
// 从文件中读取公钥和私钥
pubkey_file = fopen("public.pem", "r");
RSA *pubkey = PEM_read_RSA_PUBKEY(pubkey_file, nullptr, nullptr, nullptr);
fclose(pubkey_file);
privkey_file = fopen("private.pem", "r");
RSA *privkey = PEM_read_RSAPrivateKey(privkey_file, nullptr, nullptr, nullptr);
fclose(privkey_file);
// 明文数据
const char *plaintext = "Hello, world!";
// 公钥加密
int ciphertext_len = RSA_size(pubkey);
unsigned char *ciphertext = new unsigned char[ciphertext_len];
int ret = RSA_public_encrypt(strlen(plaintext), (unsigned char *)plaintext, ciphertext, pubkey, RSA_PKCS1_OAEP_PADDING);
if (ret == -1) {
printf("RSA_public_encrypt failed!\n");
return -1;
}
// 私钥解密
unsigned char *decrypted = new unsigned char[ret];
ret = RSA_private_decrypt(ciphertext_len, ciphertext, decrypted, privkey, RSA_PKCS1_OAEP_PADDING);
if (ret == -1) {
printf("RSA_private_decrypt failed!\n");
return -1;
}
// 输出解密后的明文
printf("%.*s\n", ret, decrypted);
// 释放内存
RSA_free(keypair);
RSA_free(pubkey);
RSA_free(privkey);
delete[] ciphertext;
delete[] decrypted;
return 0;
}
```
此代码中,我们使用 RSA_generate_key 函数生成一个 2048 位的 RSA 密钥对,然后将公钥和私钥分别保存到 public.pem 和 private.pem 文件中。接着,我们使用 PEM_read_RSA_PUBKEY 和 PEM_read_RSAPrivateKey 函数从文件中读取公钥和私钥。然后,我们使用 RSA_public_encrypt 函数使用公钥加密明文数据,再使用 RSA_private_decrypt 函数使用私钥解密密文数据。最后,我们输出解密后的明文数据,并释放内存。