基于Linux系统下的文件加密解密技术
作者:佚名
上传时间:2023-05-24
运行软件:C语言
软件版本:openssl1.1.1
版权申诉
该示例代码演示了在Linux系统下利用openssl库对文件进行加密和解密的实现方式。其中包括了采用对称加密算法AES和非对称加密算法RSA的代码示例。通过使用不同的密钥进行加密和解密,确保文件的安全性。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/aes.h>
#include <openssl/rsa.h>
// 使用AES加密文件
void aes_encrypt_file(char *in_filename, char *out_filename, unsigned char *key) {
AES_KEY aes_key;
unsigned char iv[AES_BLOCK_SIZE];
int bytesRead, bytesWrite;
FILE *fin = fopen(in_filename, "rb");
FILE *fout = fopen(out_filename, "wb");
// 初始化iv向量
memset(iv, 0, AES_BLOCK_SIZE);
// 设置加密密钥
AES_set_encrypt_key(key, 256, &aes_key);
// 逐段加密文件内容
while (1) {
unsigned char in_data[AES_BLOCK_SIZE];
unsigned char out_data[AES_BLOCK_SIZE];
bytesRead = fread(in_data, 1, AES_BLOCK_SIZE, fin);
AES_cbc_encrypt(in_data, out_data, bytesRead, &aes_key, iv, AES_ENCRYPT);
bytesWrite = fwrite(out_data, 1, bytesRead, fout);
if (bytesRead < AES_BLOCK_SIZE) {
break;
}
}
fclose(fin);
fclose(fout);
}
// 使用AES解密文件
void aes_decrypt_file(char *in_filename, char *out_filename, unsigned char *key) {
AES_KEY aes_key;
unsigned char iv[AES_BLOCK_SIZE];
int bytesRead, bytesWrite;
FILE *fin = fopen(in_filename, "rb");
FILE *fout = fopen(out_filename, "wb");
// 初始化iv向量
memset(iv, 0, AES_BLOCK_SIZE);
// 设置解密密钥
AES_set_decrypt_key(key, 256, &aes_key);
// 逐段解密文件内容
while (1) {
unsigned char in_data[AES_BLOCK_SIZE];
unsigned char out_data[AES_BLOCK_SIZE];
bytesRead = fread(in_data, 1, AES_BLOCK_SIZE, fin);
AES_cbc_encrypt(in_data, out_data, bytesRead, &aes_key, iv, AES_DECRYPT);
bytesWrite = fwrite(out_data, 1, bytesRead, fout);
if (bytesRead < AES_BLOCK_SIZE) {
break;
}
}
fclose(fin);
fclose(fout);
}
// 使用RSA加密AES密钥
void rsa_encrypt_key(unsigned char *key, int key_len, char *pemfile, char *cipherfile) {
FILE * fp = fopen(pemfile, "rb");
RSA *rsa = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL);
fclose(fp);
int flen = RSA_size(rsa);
unsigned char *out = (unsigned char*)malloc(flen);
RSA_public_encrypt(key_len, key, out, rsa, RSA_PKCS1_OAEP_PADDING);
FILE *fout = fopen(cipherfile, "wb");
fwrite(out, 1, flen, fout);
fclose(fout);
RSA_free(rsa);
free(out);
}
// 使用RSA解密AES密钥
void rsa_decrypt_key(unsigned char *cipher, int cipher_len, char *pemfile, unsigned char *dec) {
FILE * fp = fopen(pemfile, "rb");
RSA *rsa = PEM_read_RSAPrivateKey(fp, NULL, NULL, NULL);
fclose(fp);
int flen = RSA_size(rsa);
RSA_private_decrypt(cipher_len, cipher, dec, rsa, RSA_PKCS1_OAEP_PADDING);
RSA_free(rsa);
}
int main() {
// 生成随机密钥
unsigned char key[32];
RAND_bytes(key, 32);
// 加密文件
aes_encrypt_file("test.txt", "test.aes", key);
// 加密密钥
rsa_encrypt_key(key, 32, "public.pem", "key.cipher");
// 解密密钥
unsigned char out_key[32];
memset(out_key, 0, 32);
unsigned char cipher[256];
int cipher_len;
FILE *fp = fopen("key.cipher", "rb");
cipher_len = fread(cipher, 1, 256, fp);
rsa_decrypt_key(cipher, cipher_len, "private.pem", out_key);
fclose(fp);
// 解密文件
aes_decrypt_file("test.aes", "test.dec", out_key);
printf("Done!\n");
return 0;
}
免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 server@dude6.com
用户评论
相关推荐
基于Linux系统下的文件加密解密技术
该示例代码演示了在Linux系统下利用openssl库对文件进行加密和解密的实现方式。其中包括了采用对称加密算法AES和非对称加密算法RSA的代码示例。通过使用不同的密钥进行加密和解密,确保文件的安全
openssl1.1.1
C语言
2023-05-24 03:23
Linux下加密文件解密的示例代码
本示例代码演示了在Linux环境下,如何使用gpg工具进行文件加密和解密的过程。首先生成公钥和私钥,然后使用公钥加密文件,最后使用私钥进行解密,获取原始文件内容。#!/bin/bash #
gpg version 2.2.19
bash
2023-04-10 08:28
文件加密解密系统
文件加密解密系统
RAR
0B
2019-01-08 11:34
加密解密文件加密解密
文件的加密解密,一些流的操作,流的加密....DES;文件的加密解密,一些流的操作,流的加密....DES
RAR
55KB
2020-07-30 11:56
DES加密解密适用的Windows和Linux系统防止Linux的下解密失败工具类
DES加密解密(适用Windows和Linux系统)防止linux下解密失败,主要是SecureRandom实现完全随操作系统本身的內部状态
RAR
0B
2020-05-14 21:07
applet文件加密系统基于JFrame翻译解密
java对文字加密及解密操作 把文字转化为密文,并有翻译功能 基于图形用户界面
JAVA
0B
2019-01-15 03:15
基于des的加密解密系统
使用vc开发了一个基于des的文件加密解密系统
RAR
0B
2019-10-06 03:15
基于Java的文件加密与解密
本程序完成用户无限制的输入数据,并生成相关文件,用户设置相关的密码之后进行加密,只有用户输入正确的密码才能看到相应的数据。主要用到Java的IO流操作。
RAR
0B
2019-02-17 02:21
简易文件加密解密系统
简易文件加密解密系统.
PPTX
0B
2019-01-06 16:21
Linux下的文件加解密技术:GnuPG
GnuPG (GNU Privacy Guard或GPG):Linux 下的基于PGP(Pretty Good Privacy)机制的加密及签