rsa文件加密c加加代码
时间: 2024-03-14 09:45:57 浏览: 53
以下是使用C语言实现RSA文件加密的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#define KEY_LENGTH 2048 // RSA密钥长度
#define BLOCK_SIZE 245 // 加密块大小,需要小于KEY_LENGTH/8-11
int main()
{
RSA *rsa = NULL;
FILE *fp = NULL;
char *pub_key_file = "public_key.pem"; // 公钥文件名
char *in_file = "input.txt"; // 待加密文件名
char *out_file = "output.txt"; // 加密后文件名
// 读取公钥文件
if ((fp = fopen(pub_key_file, "rb")) == NULL)
{
printf("Error: cannot open public key file!\n");
return -1;
}
if ((rsa = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL)) == NULL)
{
printf("Error: cannot read public key file!\n");
return -1;
}
fclose(fp);
// 打开待加密文件
if ((fp = fopen(in_file, "rb")) == NULL)
{
printf("Error: cannot open input file!\n");
RSA_free(rsa);
return -1;
}
// 创建加密后文件
FILE *fout = NULL;
if ((fout = fopen(out_file, "wb")) == NULL)
{
printf("Error: cannot create output file!\n");
RSA_free(rsa);
fclose(fp);
return -1;
}
// 分块加密
int block_size = BLOCK_SIZE;
unsigned char *in = (unsigned char *)malloc(block_size);
unsigned char *out = (unsigned char *)malloc(KEY_LENGTH/8);
int in_len, out_len;
while ((in_len = fread(in, 1, block_size, fp)) > 0)
{
out_len = RSA_public_encrypt(in_len, in, out, rsa, RSA_PKCS1_PADDING);
if (out_len == -1)
{
printf("Error: RSA encryption failed!\n");
RSA_free(rsa);
fclose(fp);
fclose(fout);
free(in);
free(out);
return -1;
}
fwrite(out, 1, out_len, fout);
}
// 释放资源
RSA_free(rsa);
fclose(fp);
fclose(fout);
free(in);
free(out);
printf("Encryption successful!\n");
return 0;
}
```
需要注意的是,该代码使用了OpenSSL库来实现RSA加密,因此需要在编译时链接该库。例如,使用gcc编译命令如下:
```
gcc -o rsa_encrypt rsa_encrypt.c -lcrypto
```
其中,"-lcrypto"选项表示链接OpenSSL库。
阅读全文