當前位置:
首頁 > 知識 > c語言對文件進行加密與解密

c語言對文件進行加密與解密



c語言對文件進行加密與解密



操作界面


加密前的文件:



c語言對文件進行加密與解密


加密後的文件



c語言對文件進行加密與解密



想要一起學習C++的可以加裙六二六八七一九一六,裙內有各種資料滿足大家,歡迎加裙


將加密後的文件解密後即可還原


初始密碼為: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("密碼驗證失敗!
");


getch();


exit(1);


}else{


printf("驗證通過!
");


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("輸入異常!
");


printf("按任意鍵繼續..........");


getch();

}


}


return 0;


}


//輸出界面


void Print(){


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


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


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


printf("***** 3.修改密碼 ****
");

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


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


}


//獲取登錄密碼


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


Password[i] ^= Password_K[i];


}


Password[i] = "";


//將密碼寫入文件


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

printf("文件寫入失敗!
");


exit(1);


}


//還原密碼


for(i = 0; i


Password[i] ^= Password_K[i];


}


Password[i] = "";


return 1;


}


//讀取密碼並轉碼


fread(Password, 1, 30, PasswordBin);


for(i = 0; 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("請輸入原文件的完整路徑:
");


fflush(stdin);


scanf("%s", BeforeFile_s);


printf("請輸入新建文件的完整路徑:
");


fflush(stdin);


scanf("%s", AfterFile_s);


printf("請輸入加密 密鑰:
");


fflush(stdin);


scanf("%s", Key_s);


KeyNum = strlen(Key_s);


//打開前文件


BeforeFile = fopen(BeforeFile_s, "rb");


if(BeforeFile == NULL){


printf("文件[%s]打開失敗!
", BeforeFile_s);


printf("按任意鍵繼續..........");


getch();


return 1;


}


//打開後文件


AfterFile = fopen(AfterFile_s, "wb");


if(AfterFile == NULL){


printf("文件[%s]打開失敗!
", AfterFile_s);


printf("按任意鍵繼續..........");


getch();


fclose(BeforeFile);


return 1;


}


//進行文件加密解密


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


for(i = 0; i


Buffer[i] ^= Key_s[i];


}


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


printf("文件寫入失敗!
");


printf("按任意鍵繼續..........");


getch();


fclose(BeforeFile);


fclose(AfterFile);


return 1;


}


}


printf("操作成功!
");


printf("按任意鍵繼續..........");


getch();


fclose(BeforeFile);


fclose(AfterFile);


return 0;


}


//密碼驗證函數


int PasswordVerify(){


char Password_s[30];


int i, j;


for(i = 0; i


printf("請輸入驗證密碼(第%d次,還剩%d次):
", i+1, 3-i);


fflush(stdin);


//接收鍵盤錄入


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


Password_s[j] = getch();


//輸入回車時


if(Password_s[j] == "
"){


Password_s[j] = "";


break;


}


//輸入退格時


if(Password_s[j] == ""){


printf(" ");


j -= 2;


if(j


j = -1;


}


continue;


}


printf("*");


}


printf("
");


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("驗證失敗!
");


printf("按任意鍵繼續..........");


return 0;


}


printf("請輸入新密碼:
");


fflush(stdin);


//接收鍵盤錄入


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


Password_s[j] = getch();


//輸入回車時


if(Password_s[j] == "
"){


Password_s[j] = "";


break;


}


//輸入退格時


if(Password_s[j] == ""){


printf(" ");


j -= 2;


if(j


j = -1;


}


continue;


}


printf("*");


}


printf("
");


printf("請再次輸入:
");


fflush(stdin);


//接收鍵盤錄入


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


Password_ss[j] = getch();


//輸入回車時


if(Password_ss[j] == "
"){


Password_ss[j] = "";


break;


}


//輸入退格時


if(Password_ss[j] == ""){


printf(" ");


j -= 2;


if(j


j = -1;


}


continue;


}


printf("*");


}


printf("
");


//驗證兩次輸入密碼是否相同


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


printf("兩次密碼輸入不同!修改失敗!
");


printf("按任意鍵繼續..........");


getch();


return 0;


}


//將修改後的密碼寫入文件


PasswordBin = fopen(PasswordPath, "wb");


for(i = 0; i


Password_s[i] ^= Password_K[i];


}


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


printf("密碼修改成功!
");


printf("按任意鍵繼續..........");


getch();


return 0;


}


想要一起學習C++的可以加裙六二六八七一九一六,裙內有各種資料滿足大家,歡迎加裙

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 C加加 的精彩文章:

TAG:C加加 |

您可能感興趣

PDF文件怎樣才能進行文件加密?
FSB 發布加密資產監管框架,對加密貨幣等金融資產進行監管
拒絕接受?中國將對蘇35進行關鍵改進,俄坦言:已毫無秘密可言
SMSG建議根據現有規則對加密資產進行監管
NUXT項目中應用RSA加密技術進行登錄加密驗證
俄羅斯加密貨幣法規草案進行重大修改
加拿大正式表態,對美進行制裁
D加密破解組織創始人被逮捕 宣布不再進行破解工作
如何對有訪問密碼的MySQL資料庫進行取證?
解密華為很嚇人手機技術:或將對安卓系統進行換血手術!
聯盟預計不會就JR-史密斯採訪言論對其進行處罰
如何對經前端加密後的數據進行爆破
特朗普:若俄願就敘烏問題同美進行合作 擬取消對俄制裁
土耳其與以色列就改善外交關係進行秘密會談
解密華為很嚇人手機技術:對安卓系統進行換血手術!
烏克蘭當局目前不打算對加密貨幣挖礦進行監管
Light宣布與索尼進行合作,發力多相機應用和解決方案
美國對伊朗金融施加壓力,蓬佩奧將會公布政策:願意進行談判?
癌細胞專家對《工作細胞》第7話進行超認真解說,大力稱讚動畫內容非常正確!
美國聯邦調查部擬針對華為竊取商業機密事件進行調查