C++使用OpenSSL进行RSA加密和解密
时间: 2024-10-14 07:04:07 浏览: 78
在C++中,通过OpenSSL库可以方便地进行RSA加密和解密操作。以下是基本步骤:
1. **安装OpenSSL**:首先需要下载并安装OpenSSL,许多C++发行版如Dev-C++, mingw-w64等已经包含了OpenSSL支持。
2. **包含头文件**:在你的C++源码中,添加`#include <openssl/bio.h>`、`#include <openssl/pem.h>`、`#include <openssl/rsa.h>`等必要的头文件。
3. **生成RSA密钥对**:
- 使用`RSA* RSA_new()`创建一个新的RSA结构。
- 使用`RSA_generate_key()`生成指定长度的密钥对,例如`RSA_generate_key_ex(RSA_new(), keysize, e, NULL)`,其中`keysize`是位数,`e`是公钥指数(通常取65537)。
4. **保存和加载私钥**:
- 可以使用PEM(Privacy Enhanced Mail)格式将私钥转换为字符串,并保存到文件,`PEM_write_PrivateKey_file(private_key, "password", &pkey_info, NULL)`。
- 加密时从文件读取私钥并解密,`RSA* rsa = PEM_read_RSAPrivateKey(file, NULL, NULL, NULL)`。
5. **加密数据**:
- 对明文使用公钥(`public_key`)加密,`unsigned char ciphertext[...];`,`RSA_public_encrypt(plaintext_len, plaintext, ciphertext, public_key, padding)`
6. **解密数据**:
- 对密文使用私钥(`private_key`)解密,`RSA_private_decrypt(ciphertext_len, ciphertext, plaintext, private_key, padding)`。
7. **清理内存**:
- 使用完RSA对象后记得释放内存,`RSA_free(rsa)`。
```cpp
// 示例代码片段
RSA *private_key;
FILE *file;
if ((private_key = PEM_read_RSAPrivateKey(filename, NULL, NULL, NULL)) == NULL) {
// 错误处理
}
BIO *bio = BIO_new(BIO_s_mem());
if (!BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL | BIO_FLAGS_MEM_RDONLY)) {
// 错误处理
}
BIO_write(bio, pem, pem_length);
RSA_private_decrypt(BIO_get_contents(bio), ciphertext, plaintext, private_key, RSA_PKCS1_PADDING);
// 解密后的操作...
RSA_free(private_key);
BIO_free_all(bio);
```
阅读全文