C語言(檔案加解密)

鋸齒流沙發表於2017-12-27

經過上一篇文章的學習,已經熟悉了檔案的基本操作。本文主要學習使用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"。

以上就是使用異或運算對檔案進行加解密的例項。

相關文章