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")
}