使用openssl编写RSA加解密算法
时间: 2023-08-03 22:07:37 浏览: 46
好的,下面是使用 OpenSSL 库编写 RSA 加解密算法的示例代码,你可以根据自己的需求进行修改:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
int main(int argc, char* argv[]) {
// 生成 RSA 密钥对
RSA* rsa = RSA_generate_key(2048, RSA_F4, NULL, NULL);
if (rsa == NULL) {
printf("RSA_generate_key failed!\n");
return -1;
}
// 保存公钥和私钥到文件中
FILE* fp = fopen("public_key.pem", "w");
if (fp == NULL) {
printf("Open public_key.pem failed!\n");
return -1;
}
PEM_write_RSAPublicKey(fp, rsa);
fclose(fp);
fp = fopen("private_key.pem", "w");
if (fp == NULL) {
printf("Open private_key.pem failed!\n");
return -1;
}
PEM_write_RSAPrivateKey(fp, rsa, NULL, NULL, 0, NULL, NULL);
fclose(fp);
// 加密字符串
const char* plain_text = "Hello, RSA!";
int plain_text_len = strlen(plain_text);
int max_cipher_len = RSA_size(rsa);
unsigned char* cipher_text = (unsigned char*)malloc(max_cipher_len);
int cipher_len = RSA_public_encrypt(plain_text_len, (const unsigned char*)plain_text, cipher_text, rsa, RSA_PKCS1_PADDING);
if (cipher_len < 0) {
printf("RSA_public_encrypt failed!\n");
return -1;
}
// 解密字符串
unsigned char* result = (unsigned char*)malloc(plain_text_len + 1);
int result_len = RSA_private_decrypt(cipher_len, cipher_text, result, rsa, RSA_PKCS1_PADDING);
if (result_len < 0) {
printf("RSA_private_decrypt failed!\n");
return -1;
}
result[result_len] = '\0';
printf("plain_text: %s\n", plain_text);
printf("cipher_len: %d\n", cipher_len);
printf("cipher_text: ");
for (int i = 0; i < cipher_len; i++) {
printf("%02X ", cipher_text[i]);
}
printf("\n");
printf("result_len: %d\n", result_len);
printf("result: %s\n", result);
RSA_free(rsa);
free(cipher_text);
free(result);
return 0;
}
```
这个示例代码中,我们使用 OpenSSL 库生成了一个 2048 位的 RSA 密钥对,并将公钥和私钥保存到文件中。然后我们加密了一个字符串 "Hello, RSA!",并对其进行解密,最后输出了加密前后的字符串和加密后的密文。