乔山办公网我们一直在努力
您的位置:乔山办公网 > word文档 > word文档解密-对文件进行加密与解密(c语言)

word文档解密-对文件进行加密与解密(c语言)

作者:乔山办公网日期:

返回目录:word文档




操作界面


加密前的文件:


加密后的文件


将加密后的文件解密后即可还原


初始密码为:hujing


开发环境:vc6.0


操作系统:windows


源代码

/**************************************************


*** 实现了对一个文件进行加密和解密 ***


*** 作者:胡靖 ***


*** 版本:1.0 ***


**************************************************/


#include


#include


#include


void Print();


int Encryption();


int PasswordVerify();


int PasswordChange();


int PasswordGet();


char Password[30] = "hujing";


char Password_K[30] = "123451234512345123451234512345";


char PasswordPath[] = "c:string.txt";


int main(){


int i;


PasswordGet();


if(PasswordVerify() == 0){


printf("密码验证失败!n");


getch();


exit(1);


}else{


printf("验证通过!n");


getch();


}


while(1){


system("cls");//清屏


fflush(stdin);//清空缓冲区


Print();


scanf("%d", &i);


switch(i){


case 1:


case 2: Encryption(); break;


case 3: PasswordChange(); break;


case 0: exit(1);


default: printf("输入异常!n");


printf("按任意键继续..........");


getch();


}


}


return 0;


}


//输出界面


void Print(){


printf("*******************************************n");


printf("***** 1.加密 ****n");


printf("***** 2.解密 ****n");


printf("***** 3.修改密码 ****n");


printf("***** 0.退出 ****n");


printf("*******************************************n");


}


//获取登录密码


int PasswordGet(){


FILE *PasswordBin;


int i, num;


PasswordBin = fopen(PasswordPath, "rb");


//文件打开失败(第一次登陆)


if(PasswordBin == NULL){


num = strlen(Password);


PasswordBin = fopen(PasswordPath, "wb");


system("attrib +H c:string");


//将初始密码转码


for(i = 0; i < num; i++){


Password[i] ^= Password_K[i];


}


Password[i] = '0';


//将密码写入文件


if( fwrite(Password, 1, num, PasswordBin) == 0){


printf("文件写入失败!n");


exit(1);


}


//还原密码


for(i = 0; i < num; i++){


Password[i] ^= Password_K[i];


}


Password[i] = '0';


return 1;


}


//读取密码并转码


fread(Password, 1, 30, PasswordBin);


for(i = 0; i < strlen(Password); i++){


Password[i] ^= Password_K[i];


}


return 0;


}


//加密解密函数


int Encryption(){


char BeforeFile_s[30], //加密前文件路径


Key_s[30], //密钥


AfterFile_s[30]; //加密后文件路径


FILE *BeforeFile, //加密前文件


*AfterFile; //加密后文件


char Buffer[50]; //缓存数组


int ReadNum, //读取的长度


KeyNum; //密钥的长度


int i;


//接收文件路径及密钥


printf("请输入原文件的完整路径:n");


fflush(stdin);


scanf("%s", BeforeFile_s);


printf("请输入新建文件的完整路径:n");


fflush(stdin);


scanf("%s", AfterFile_s);


printf("请输入加密 密钥:n");


fflush(stdin);


scanf("%s", Key_s);


KeyNum = strlen(Key_s);


//打开前文件


BeforeFile = fopen(BeforeFile_s, "rb");


if(BeforeFile == NULL){


printf("文件[%s]打开失败!n", BeforeFile_s);


printf("按任意键继续..........");


getch();


return 1;


}


//打开后文件


AfterFile = fopen(AfterFile_s, "wb");


if(AfterFile == NULL){


printf("文件[%s]打开失败!n", AfterFile_s);


printf("按任意键继续..........");


getch();


fclose(BeforeFile);


return 1;


}


//进行文件加密解密


while((ReadNum = fread(Buffer, 1, KeyNum, BeforeFile)) != 0){


for(i = 0; i < ReadNum; i++){


Buffer[i] ^= Key_s[i];


}


if( fwrite(Buffer, 1, ReadNum, AfterFile) == 0){


printf("文件写入失败!n");


printf("按任意键继续..........");


getch();


fclose(BeforeFile);


fclose(AfterFile);


return 1;


}


}


printf("操作成功!n");


printf("按任意键继续..........");


getch();


fclose(BeforeFile);


fclose(AfterFile);


return 0;


}


//密码验证函数


int PasswordVerify(){


char Password_s[30];


int i, j;


for(i = 0; i < 3; i++){


printf("请输入验证密码(第%d次,还剩%d次):n", i+1, 3-i);


fflush(stdin);


//接收键盘录入


for(j = 0; 1; j++){


Password_s[j] = getch();


//输入回车时


if(Password_s[j] == 'r'){


Password_s[j] = '0';


break;


}


//输入退格时


if(Password_s[j] == 'b'){


printf("b b");


j -= 2;


if(j < 0){


j = -1;


}


continue;


}


printf("*");


}


printf("n");


if(strcmp(Password_s, Password) == 0){


return 1;


}


}


return 0;


}


//密码修改函数


int PasswordChange(){


FILE *PasswordBin;


char Password_s[30], Password_ss[30];


int i, j;


//验证原密码


if(PasswordVerify() == 0){


printf("验证失败!n");


printf("按任意键继续..........");


return 0;


}


printf("请输入新密码:n");


fflush(stdin);


//接收键盘录入


for(j = 0; 1; j++){


Password_s[j] = getch();


//输入回车时


if(Password_s[j] == 'r'){


Password_s[j] = '0';


break;


}


//输入退格时


if(Password_s[j] == 'b'){


printf("b b");


j -= 2;


if(j < 0){


j = -1;


}


continue;


}


printf("*");


}


printf("n");


printf("请再次输入:n");


fflush(stdin);


//接收键盘录入


for(j = 0; 1; j++){


Password_ss[j] = getch();


//输入回车时


if(Password_ss[j] == 'r'){


Password_ss[j] = '0';


break;


}


//输入退格时


if(Password_ss[j] == 'b'){


printf("b b");


j -= 2;


if(j < 0){


j = -1;


}


continue;


}


printf("*");


}


printf("n");


//验证两次输入密码是否相同


if(strcmp(Password_s, Password_ss) != 0){


printf("两次密码输入不同!修改失败!n");


printf("按任意键继续..........");


getch();


return 0;


}


//将修改后的密码写入文件


PasswordBin = fopen(PasswordPath, "wb");


for(i = 0; i < strlen(Password_s); i++){


Password_s[i] ^= Password_K[i];


}


fwrite(Password_s, 1, strlen(Password_s), PasswordBin);


printf("密码修改成功!n");


printf("按任意键继续..........");


getch();


return 0;


}


相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网