900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > c语言程序存为bin程序 对文件进行加密与解密(c语言)-bin文件打开

c语言程序存为bin程序 对文件进行加密与解密(c语言)-bin文件打开

时间:2021-11-15 02:52:05

相关推荐

c语言程序存为bin程序 对文件进行加密与解密(c语言)-bin文件打开

操作界面

加密前的文件:

加密后的文件

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

初始密码为: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;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。