如何用C语言对文件进行简单加密
如何⽤C语⾔对⽂件进⾏简单加密
最近在完成⼤作业的时候需要实现⼀个⽤C语⾔对⽂件进⾏简单加密的操作,这⾥主要⽤的加密思路是破坏⽂件头,使得系统⽆法识别⽂件从⽽进⾏加密,最初的思路是将⽤户输⼊的加密⼝令转成ASCII码,再与⽂件头数据循环进⾏异或操作,从⽽破坏⽂件头数据,使得系统⽆法识别⽂件,⽽从安全性上来说,就算破译者拿到了⽤户的⼝令,他也⽆法知道我们拿了多少数据进⾏异或,从⽽提⾼了加密⽂件破译的安全性,若需要破译加密⽂件,不仅需要拿到⽤户的⼝令,在不知道具体加密数据位数时,只能对加密⽂件进⾏爆破异或,所以这种加密⽅式具有⼀定的安全性。
在具体实现的时候,以下仅给出最简单的实现⽅式,仅对⽂件头的20个字节的数据进⾏异或操作,且为了⽅便起见,这⾥假设⽤户的加密⼝令就是123,指定1.bmp⽂件进⾏加密和解密操作。本代码仅作加密⽂件思路参考,各位⼤佬可以根据⾃⼰的情况和需要加以补充,希望能对各位有所启发。
本⽂仅提供C语⾔简单加密⽂件的基本思路,我的后⼀篇⽂章对本代码的加解密算法进⾏了完善和补充,增强了加密⽂件的安全性,我本⼈更为推荐,这⾥放⼀个链接,需要的朋友也可以看⼀下
#include<stdio.h>
//全局变量的定义
unsigned short int res[10];//储存加密后的数据,⼀个unsigned short int占两个字节
unsigned short int temp;//临时储存⾮加密数据
int length;//储存原⽂件长度
int i=0;
void encrypto()
{
FILE *fp1=fopen("1.bmp","rb");//这⾥可以改为⽤户输⼊路径⽂件,本程序为了便捷就固定了⽂件名
if(fp1!=NULL)
{
for(i=0;i<10;i++){
fread(&res[i],sizeof(unsigned short int),1,fp1);//从原⽂件种读取20个字节
res[i]^=123;//将读取出的数据与⽤户输⼊的密钥做异或,粉碎⽂件头
}//这⾥为了⽅便起见假设⽤户加密⼝令为123
//获取BMP原⽂件长度
fseek(fp1,0,2);//使⽂件光标退到⽂件结尾
length=ftell(fp1);//放回⽂件长度
fclose(fp1);
FILE *fp2=fopen("2.bmp","wb");//这⾥也可以改为⽤户输⼊的路径
fp1=fopen("1.bmp","rb");
if(fp2!=NULL)
{
for(i=0;i<10;i++){
fwrite(&res[i],sizeof(unsigned short int),1,fp2);//将异或后的数据存储在新⽂件中
}
fseek(fp1,20,0);//将原⽂件的⽂件指针向后移动20个字节
while(i<length/2)//循环将fp1的⾮加密数据写⼊fp2中
{
fread(&temp,sizeof(unsigned short int),1,fp1);
fwrite(&temp,sizeof(unsigned short int),1,fp2);
i++;
}
fclose(fp1);
fclose(fp2);
printf("加密成功!请牢记您的加密⼝令\n");
}else{
printf("保存加密⽂件失败!\n");
}
}else{
printf("打开⽂件失败!\n");
}
}
void decrypto()
{
FILE *fp1=NULL,*fp2=NULL;
fp1=fopen("2.bmp","rb");//打开加密⽂件
fseek(fp1,0,2);//使加密⽂件的光标移动到⽂件末尾
length=ftell(fp1);//获取加密⽂件的长度
length=ftell(fp1);//获取加密⽂件的长度
rewind(fp1);//使加密⽂件的光标移动到⽂件开头
for(i=0;i<10;i++){//
fread(&res[i],sizeof(unsigned short int),1,fp1);//从加密⽂件中取出要解密部分的数据
res[i]^=123;
}
fp2=fopen("3.bmp","wb");//fp2为解密⽂件指针
for(i=0;i<10;i++)
{
fwrite(&res[i],sizeof(unsigned short int),1,fp2);//写⼊解密后的数据
}
fseek(fp1,20,0);
i=0;
while(i<length/2)
{
fread(&temp,sizeof(unsigned short int),1,fp1);
fwrite(&temp,sizeof(unsigned short int),1,fp2);
i++;
}
printf("解密成功!\n");
}
int main()
{
如何给文件加密encrypto();
decrypto();
}
接下来我们运⾏这个代码:
可以看到以及⽣成了两个⽂件,分别是2.bmp(加密⽂件)和3.bmp(解密⽂件),我们利⽤winhex查看⽂件头
不难发现对于2.bmp⽂件的⽂件头已经⽆法识别,⽽3.bmp⽂件的⽂件头于原⽂件(1.bmp)⼀致,通过查看图⽚属性也能发现这三个bmp⽂件的⼤⼩完全⼀致,所以不存在数据的损失,⽽当你打开2.bmp⽂件的时候,却会发现
系统已经⽆法识别和显⽰出加密⽂件,⾄此,我们利⽤C语⾔对⽂件进⾏加密和解密的操作全部完成。希望能为各位⼤佬抛砖引⽟。
再次感谢你的观看,若还有疑问,欢迎评论留⾔。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。