經過上一篇文章的學習,已經熟悉了檔案的基本操作。本文主要學習使用C語言,對檔案進行加密和解密。
在c語言,檔案主要分為文字檔案和二進位制檔案,因此主要是對這兩種檔案進行加解密。
文字檔案加解密
原檔案
/*
加密
對每一個字元進行 異或運算
規則:1^1=0, 0^0=0, 1^0=1, 0^1=1 同為0,不同為1
*/
void crpypt(char file_path[],char crpypt_path[] ){
//開啟檔案
FILE *file_p = fopen(file_path,"r");
FILE *crpy_p = fopen(crpypt_path,"w");
//一次讀取一個字元
char ch;
//EOF:end of file
while ((ch = fgetc(file_p)) != EOF){
//寫入(異或運算)
fputc(ch ^ 9, crpy_p);
}
//關閉
fclose(file_p);
fclose(crpy_p);
printf("加密完成");
}
複製程式碼
void main(){
char *path = "D:\\mytest.txt";
char *crpypt_path = "D:\\crpypt_mytest.txt";
char *decrypt_path = "D:\\decrpypt_mytest.txt";
crpypt(path,crpypt_path);
getchar();
}
複製程式碼
得到加密檔案
文字檔案解密
void decrpypt(char crypt_path[], char decrypt_path[]){
//開啟檔案
FILE *crpypt_p = fopen(crypt_path, "r");
FILE *decrpypt_p = fopen(decrypt_path, "w");
//一次讀取一個字元
char ch;
//EOF:end of file
while ((ch = fgetc(crpypt_p)) != EOF){
//寫入(異或運算)
fputc(ch ^ 9, decrpypt_p);
}
//關閉
fclose(crpypt_p);
fclose(decrpypt_p);
printf("解密完成");
}
複製程式碼
void main(){
char *path = "D:\\mytest.txt";
char *crpypt_path = "D:\\crpypt_mytest.txt";
char *decrypt_path = "D:\\decrpypt_mytest.txt";
decrpypt(crpypt_path, decrypt_path);
getchar();
}
複製程式碼
解密得到的檔案
以上就是對文字檔案進行加解密,演算法:對文字檔案的字元進行異或運算。
二進位制檔案加解密
二進位制檔案加密
/*
二進位制檔案加解密
讀取二進位制檔案中的資料時,一個一個字元讀取
對每一個字元進行 異或運算
*/
/*
二進位制檔案加解密
讀取二進位制檔案中的資料時,一個一個字元讀取
對每一個字元進行 異或運算
*/
void crpypt(char file_path[], char crpypt_path[], char password[]){
//開啟檔案
FILE *file_p = fopen(file_path, "rb");
FILE *crpy_p = fopen(crpypt_path, "wb");
//一次讀取一個字元
int ch;
int i = 0; //迴圈使用密碼中的字母進行異或運算
int pw_len = strlen(password); //密碼的長度
while ((ch = fgetc(file_p)) != EOF){ //End of File
//寫入(異或運算)
fputc(ch ^ password[i % pw_len], crpy_p);
i++;
}
//關閉
fclose(file_p);
fclose(crpy_p);
printf("加密完成");
}
複製程式碼
/*
密碼:password
*/
void main(){
char *path = "D:\\timg.jpg";
char *crpypt_path = "D:\\crpypt_timg.jpg";
char *decrypt_path = "D:\\decrpypt_timg.jpg";
crpypt(path, crpypt_path, "password");
getchar();
}
複製程式碼
原檔案
加密後
二進位制檔案解密
//解密
void decrpypt(char crypt_path[], char decrypt_path[], char password[]){
//開啟檔案
FILE *crpypt_p = fopen(crypt_path, "rb");
FILE *decrpypt_p = fopen(decrypt_path, "wb");
//一次讀取一個字元
int ch;
//迴圈使用密碼中的字母進行異或運算
int i = 0;
//密碼的長度
int pw_len = strlen(password);
//EOF:end of file
while ((ch = fgetc(crpypt_p)) != EOF){
//寫入(異或運算)
fputc(ch ^ password[i % pw_len], decrpypt_p);
i++;
}
//關閉
fclose(crpypt_p);
fclose(decrpypt_p);
printf("解密完成");
}
/*
密碼:password
*/
void main(){
char *path = "D:\\timg.jpg";
char *crpypt_path = "D:\\crpypt_timg.jpg";
char *decrypt_path = "D:\\decrpypt_timg.jpg";
decrpypt(crpypt_path, decrypt_path, "password");
getchar();
}
複製程式碼
執行結果:
二進位制檔案的載入跟文字檔案的加密,這裡使用的都是同樣的演算法:異或運算。
注意: 二進位制檔案和文字檔案讀寫不一樣 文字檔案讀寫分別使用:"r","w" 二進位制檔案讀寫分別使用:"rb","wb"。
以上就是使用異或運算對檔案進行加解密的例項。