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