文件加密
优质
小牛编辑
146浏览
2023-12-01
文件加密
案例描述
近些年来,因为信息泄露造成财产损失的事件时有发生。随着科技的发展,信息的传播与获取越来越方便,为了防止因信息泄露造成的各种危机,信息加密技术应得到充分的重视。本案例要求设计程序,对已经存在的文件进行加密和解密。
案例分析
文件加密的目的是保证信息的安全,加密的原理是根据某种原则,对源文件中的信息进行修改,使加密后的文件在与源文件仍保持联系的情况下,不会直接反映出源文件中存储的信息,并且加密后的文件能根据某种原则,还原出源文件的内容。
案例实现
根据案例分析,本案例中的文件可分为三个:源文件,加密文件和解密后的文件。
使用异或的方式对源文件进行加密。为了保证源文件的完整,这里将加密后的信息存放到新的文件中,所以将运算的结果存储到加密文件。
若要根据加密文件获取源文件中存储的信息,需要逐个读取加密文件中的字符,使其与密码再次异或,获取解密后的信息。
案例代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//加密函数
void encrypt(char *sfile, char *cfile)
{
printf("文件加密中...\n");
int i = 0;
//定义两个文件指针,分别指向源文件和加密后的文件
FILE *fp1, *fp2;
int ch; //记录从源文件中获取的字符
//以只读的方式打开源文件
fp1 = fopen(sfile, "rb");
if (fp1 == NULL)
{
printf("无法打开源文件%s\n",sfile);
return;
}
//以只写的方式打开加密文件
fp2 = fopen(cfile, "wb");
if (fp2 == NULL)
{
printf("无法打开加密文件%s\n", cfile);
return;
}
ch = fgetc(fp1);//从源文件中读取一个字符
while (!feof(fp1))
{
//采用异或方式,使用密码"123+i"对字符逐个加密
ch = (123 + i) ^ ch;
i++;
fputc(ch, fp2); //将加密后的字符写入加密文件fp2
ch = fgetc(fp1);//继续从源文件中获取字符
if (i > 5)
i = 0;
}
printf("加密完成!\n");
//关闭文件
fclose(fp1);
fclose(fp2);
}
//解密函数
void decrypt(char *cfile, char *dfile)
{
int i = 0;
//定义两个文件指针,分别指向加密文件和解密后的文件
FILE *fp1, *fp2;
int ch;
//以只读的方式打开加密文件
fp1 = fopen(cfile, "rb");
if (fp1 == NULL)
{
printf("无法打开加密文件%s\n", cfile);
return;
}
//以只写的方式打开解密后的文件
fp2 = fopen(dfile, "wb");
if (fp2 == NULL)
{
printf("无法打开解密后的文件%s\n", cfile);
return;
}
//解密
ch = fgetc(fp1);//获取文件fp1中的字符
while (!feof(fp1))
{
ch = (123 + i) ^ ch;//对已加密的字符逐个解密
i++;
fputc(ch, fp2); //将解密后的字符写入文件fp2
ch = fgetc(fp1);
if (i > 5)
i = 0;
}
//关闭文件
fclose(fp1);
fclose(fp2);
}
int main()
{
//定义源文件、加密文件、解密后的文件
char sourcefile[50];
char codefile[50];
char decodefile[50];
printf("请输入源文件的文件名:\n");
gets(sourcefile);
printf("请输入加密文件的文件名:\n");
gets(codefile);
//调用加密函数对源文件进行加密
encrypt(sourcefile, codefile);
//文件解密
printf("请输入解密后的文件名:\n");
gets(decodefile);
//调用解密函数对加密文件进行解密
decrypt(codefile, decodefile);
return 0;
}