openssl使用rsa加密
时间: 2025-01-23 16:25:03 浏览: 45
### 如何使用 OpenSSL 进行 RSA 加密
#### 准备工作
为了能够顺利地执行基于 OpenSSL 的 RSA 加密操作,需先安装并配置好 OpenSSL 库环境。对于 Windows 用户来说,在 VC++ 环境下调用 OpenSSL 实现 RSA 加密时,通常会选择编译带有 OpenSSL 支持的应用程序[^2]。
#### 创建密钥对
在进行任何加密之前,必须创建一对匹配的公私钥。这可以通过命令行工具完成:
```bash
openssl genpkey -algorithm RSA -out private_key.pem -aes256 -pass pass:1234 -pkeyopt rsa_keygen_bits:2048
openssl pkey -in private_key.pem -pubout -out public_key.pem -passin pass:1234
```
上述命令分别生成了一个受密码保护的 2048 位 RSA 私钥以及对应的公钥文件[^1]。
#### 文件加密流程
当好友利用公钥对消息 `a` 执行加密处理变为 `b` 后上传至网络空间供下载。此过程中采用的是标准 PKCS#1 v1.5 填充方案 (即 `RSA_PKCS1_PADDING`) ,这意味着即便原始数据完全一致,由于填充机制的存在使得最终产生的密文不尽相同。
具体到编程层面,假设已经获取到了待加密字符串,则可以按照如下方式进行编码转换:
```c
#include <openssl/rsa.h>
#include <openssl/pem.h>
// ...省略其他必要的头文件引入...
int main() {
// 初始化变量...
FILE *fp;
unsigned char plaintext[] = "message to encrypt";
int padding = RSA_PKCS1_PADDING;
fp = fopen("public_key.pem", "r");
RSA *rsa_pub = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL);
fclose(fp);
size_t ciphertext_len = RSA_size(rsa_pub);
unsigned char *ciphertext = malloc(ciphertext_len);
if (!ciphertext || !plaintext) { /* handle error */ }
int result = RSA_public_encrypt(strlen((char *)plaintext), plaintext,
ciphertext, rsa_pub, padding);
if(result == -1){
printf("Encryption failed\n");
ERR_print_errors_fp(stdout);
}else{
printf("Encrypted successfully.\n");
}
}
```
这段 C 语言代码片段展示了如何读取存储于 `.pem` 文件中的公钥,并通过调用 `RSA_public_encrypt()` 来实现对给定明文串的加密过程。
阅读全文
相关推荐

















