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;
}
總結
以上是生活随笔為你收集整理的c语言程序存为bin程序,对文件进行加密与解密(c语言)-bin文件打开的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux tracepoint例子,t
- 下一篇: c语言中的关于数学问题的编程,C语言中具