admin管理员组文章数量:1589660
最近在完成大作业的时候需要实现一个用C语言对文件进行简单加密的操作,这里主要用的加密思路是破坏文件头,使得系统无法识别文件从而进行加密,最初的思路是将用户输入的加密口令转成ASCII码,再与文件头数据循环进行异或操作,从而破坏文件头数据,使得系统无法识别文件,而从安全性上来说,就算破译者拿到了用户的口令,他也无法知道我们拿了多少数据进行异或,从而提高了加密文件破译的安全性,若需要破译加密文件,不仅需要拿到用户的口令,在不知道具体加密数据位数时,只能对加密文件进行爆破异或,所以这种加密方式具有一定的安全性。
在具体实现的时候,以下仅给出最简单的实现方式,仅对文件头的20个字节的数据进行异或操作,且为了方便起见,这里假设用户的加密口令就是123,指定1.bmp文件进行加密和解密操作。本代码仅作加密文件思路参考,各位大佬可以根据自己的情况和需要加以补充,希望能对各位有所启发。
本文仅提供C语言简单加密文件的基本思路,我的后一篇文章对本代码的加解密算法进行了完善和补充,增强了加密文件的安全性,我本人更为推荐,这里放一个链接,需要的朋友也可以看一下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); //获取加密文件的长度
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语言对文件进行加密和解密的操作全部完成。希望能为各位大佬抛砖引玉。
再次感谢你的观看,若还有疑问,欢迎评论留言。
版权声明:本文标题:如何用C语言对文件进行简单加密 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1728073912a1144246.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论