c语言文件加密

来源:互联网 发布:域名地址解析 编辑:程序博客网 时间:2024/05/18 08:24

//路过大神请不要介意我往里面添加渣渣文档

//该程序要求要加密或解密文件必须与程序在同一目录下

#include <stdio.h>
#include <stdlib.h>


//提示信息
void print_help()
{
printf("********1:加密文件***********\n");
printf("********2:解密文件***********\n");
printf("********3:退出程序***********\n");
}


//从键盘获取源文件和目的文件名字
void get_file_name(char * src_file_name,char * dest_file_name)
{
printf("请输入你的原文件名《30个字符内》\n");
scanf("%s",src_file_name);
printf("请输入你的目的文件名:\n");
scanf("%s",dest_file_name);
}
//从文件中读出内容
char * read_src_file(unsigned long int *file_length,char *src_file_name)
{
FILE *fp_ori;
if((fp_ori=fopen(src_file_name,"r"))==NULL)
{
perror("original_file open:");
return 0;


fseek(fp_ori,0,SEEK_END);
(*file_length)=ftell(fp_ori);//获得文件大小
rewind(fp_ori);

char *p=NULL;
p=(char *)malloc((*file_length)*sizeof(char));
fread(p,(*file_length)*sizeof(char),1,fp_ori);
fclose(fp_ori);
return p;

}
//文件加密
char * file_text_encrypt(char * src_file_text,unsigned long int length,unsigned int password)
{
unsigned long int i=0;
char *file_next=src_file_text;
char *file=file_next;
for(;i<length;i++)
{
*file_next=(*src_file_text)+password;
*src_file_text++;
*file_next++;
//printf("加密后:%s",file_next);
}
return file;
}


//保存加密文件
void save_file(char * src_file_text,unsigned long int file_length,char * dest_file_name)
{
FILE *fp;
char *src_file=src_file_text;
printf("加密后:%s",src_file);
if((fp=fopen(dest_file_name,"wb+"))==NULL)
{
perror("original_file open:");
return ;
}
if((fwrite(src_file,file_length,1,fp))<=0)
{
perror("dest_file_name");
return ;
}
else
{
printf("成功写入\n");
}
fclose(fp);
}
//解密
char * file_text_decrypt(char * src_file_text,unsigned long int length,unsigned int password)
{
unsigned long int i=0;
char *file_next=src_file_text;
char *file=file_next;
for(;i<length;i++)
{
*file_next=(*src_file_text)-password;
*src_file_text++;
*file_next++;
//printf("解密后:%s",file_next);
}
return file;
}
//保存解密内容
void save_jiemi_file(char * src_file_text,unsigned long int file_length,char * dest_file_name)
{
FILE *fp;
char *src_file=src_file_text;
printf("解密后:%s",src_file);
if((fp=fopen(dest_file_name,"wb+"))==NULL)
{
perror("original_file open:");
return ;
}
if((fwrite(src_file,file_length,1,fp))<=0)
{
perror("dest_file_name");
return ;
}
else
{
printf("成功写入\n");
}
fclose(fp);
}
int main(int argc, char *argv[])
{
int i=0,num=0;
unsigned long int file_length=0;
char *p=NULL;
unsigned int password;
char dest_file_name[30],src_file_name[30];
while(1)
{
print_help();
scanf("%d",&num);
switch(num)
{
case 1:
get_file_name(src_file_name,dest_file_name);//获得文件名
p=read_src_file(&file_length,src_file_name);//读文件中数据
printf("请输入你要加密的密码:(密码为数字)\n");
scanf("%d",&password);
p=file_text_encrypt(p,file_length,password);
save_file(p,file_length,dest_file_name);
break;
case 2:
get_file_name(src_file_name,dest_file_name);//获得文件名
p=read_src_file(&file_length,src_file_name);//读文件中数据
printf("请输入解密密码\n");
scanf("%d",&password);
p=file_text_decrypt(p,file_length,password);//读取加密内容
save_jiemi_file(p,file_length,dest_file_name);//保存解密内容
break;
case 3:
return 0;
break;
default:
printf("请重新输入\n");
}
}
return 0;
}



0 0
原创粉丝点击