C语言怎样给文件加密

Python015

C语言怎样给文件加密,第1张

这个加密有简单的,有复杂的。要是简单的就直接选择文件中的某些字段,将某些字段进行1定的转换或在文件中位置的变更等。也能够将其中的每一个2进制读取,然落后行1定的运算后再存储,到达加密的效果。最后再依照1定的逆操作,恢复原来的文件,到达解密的效果。大致思路就是这样的,具体就看你的加解密的算法复杂与否了!举个非常简单的例子,可以将读取的某个数与1个你自己知道的固定的数做“异或”运算,解密的时候,你再次和这个数做“异或”运算,就能够恢复原来的那个数。这就是1种简单的加密算法,看似简单,不过却比较经常使用,由于,参与异或运算的值只有你自己知道。

文件分为文本文件和二进制文件。加密方法也略有不同。

1、文本文件

加密的主要是文本的内容,最简单的方法就是修改文档的内容,比如1.txt中的文件内容:

abcd

只要给每一个字符+1,就可以实现加密。文件内容即会变为

bcde

2、二进制文件加密

二进制文件加密也就是对应用程序加密,需要理解可执行文件格式,比如Windows平台的Exe文件它是PE结构,Linux上的可执行文件是ELF结构,要对这样的程序进行加密,实际上是开发一种叫做“壳”的程序,这种程序的开发,需要将扎实的底层基础,同时也需要对软件加密解密有细致的理解,比如流行的vmprotect、z壳以及早些年的upx壳、aspack等等。

3、无论哪种加密都牵涉到文件操作的问题,使用C语言进行文件操作时,极少使用C标准库中的I/O函数,大多数使用操作系统提供的内存文件映射相关的API函数,有兴趣,可以搜索相关的资料。

//自己写的加密,加密方法就是根据输入的密码对文件中的内容进行异或后存放在加密后的文件中

//转载请声明program by STU caige

#include<stdio.h>

#include<stdlib.h>

#include <conio.h>//getche()需要

#include<string.h>

char ch

//异或函数

int YiHuo(FILE *f0,FILE *fp,int passwordnum,int move,char key)

{

while(fread(&ch,1,1,f0),!feof(f0))

{

if (key==49)//加密

{

ch=ch+move

(char)(ch^=passwordnum)

fwrite(&ch,1,1,fp)

}

if (key==50)//解密

{

(char)(ch^=passwordnum)

ch=ch+move

fwrite(&ch,1,1,fp)

}

}

}

int main()

{

//encrypt加密 decrypt解密

FILE *f0,*fe,*fd

char fname0[50]

char efname[50]={0}

char dfname[50]={0}

char Password[50]={0},key=0,key2=0

char sysfname[20]={0}

int p=0,passwordnum,move=0//异或后移动的次数

system("cls")

do

{

system("cls")

do

{

printf("1-----------加密文件\n")

printf("2-----------解密文件\n")

printf("Esc----------退出\n")

key=getch()//读入一个键盘码

}

while ((key!='1')&&(key!='2')&&(key!=27))

Password[50]=0

passwordnum=0

if (key==49)

{

system("cls")

printf("请输入要加密的文件绝对路径\n")

scanf("%s",fname0)

// while(key=0)

//打开原文件

if ((f0=fopen(fname0,"rb"))==NULL)

{

printf("文件打不开哦!\n")

key=0//文件打开失败时key的值改变

exit(0)

printf("加密失败\n")

system("pause")

}

//只有文件fname0打开成功时才能继续打开efname

if(key==49)

{

system("cls")

printf("请输入完成加密的文件存储路径\n")

scanf("%s",efname)

if ((fe=fopen(efname,"w+"))==NULL)

{

printf("文件打不开哦!\n")

printf("加密失败\n")

fclose(f0)

system("pause")

exit(0)

key=0

}

}

//如果打开文件成功则开始输入密码

if(key==49)

{

system("cls")

printf("请输入密码\n")

scanf("%s",Password)

//把字符密码转化为整形来异或

for(p=0Password[p]!=0p++)

passwordnum+=((int)Password[p])

move=(int)(passwordnum%9)

while (move>9)

move=(int)(move%9)

printf("%d",move)system("pause")

}

if (key==49)

{//异或加密

system("cls")

YiHuo(f0,fe,passwordnum,move,key)

printf("\n加密成功,您的输出文件路径为:\n")

printf("%s",efname)

fclose(f0)

fclose(fe)

}

}

if (key==50)

{

system("cls")

printf("请输入要解密的文件绝对路径\n")

scanf("%s",fname0)

// while(key=0)

//打开原文件

if ((f0=fopen(fname0,"rb"))==NULL)

{

printf("文件打不开哦!\n")

key=0//文件打开失败时key的值改变

exit(0)

printf("解密失败\n")

system("pause")

}

//只有文件fname0打开成功时才能继续打开dfname

if(key==50)

{

system("cls")

printf("请输入完成解密的文件存储路径\n")

scanf("%s",dfname)

if ((fd=fopen(dfname,"w+"))==NULL)

{

printf("解密失败")

fclose(f0)

system("pause")

printf("文件打不开哦!\n")

exit(0)

key=0

}

}

//如果打开文件成功则开始输入密码

if(key==50)

{

system("cls")

printf("请输入密码\n")

scanf("%s",Password)

//把字符密码转化为整形来异或

for(p=0Password[p]!=0p++)

passwordnum+=((int)Password[p])

move=(int)(passwordnum%9)

while (move>9)

move=(int)(move%9)

move=(-move)

}

if (key==50)

{//异或加密

system("cls")

YiHuo(f0,fd,passwordnum,move,key)

printf("\n解密成功,您的输出文件路径为:\n%S",dfname)

system("pause")

fclose(f0)

fclose(fd)

}

}

}

while(key!=27)//当key为0,即读写两个文件都打开成功时才结束循环

return 0

printf("\n谢谢使用!,program by STU caige\n")

system("pause")

}