1 題目
函數:encrypt()
功能:文件加密
描述:C語言實現文件加密,執(zhí)行參數有 【原文件路徑及名稱 密碼 加密后文件路徑及名稱】
2 思路
register 關鍵字
C語言中的關鍵字register代表寄存器存儲類型 register修飾符暗示編譯程序相應dao的變量zhuan將被頻繁地使用,如shu果可能的話,應將其保存在CPU的寄存器中,以加快其存儲速度。這個關鍵字請求編譯器盡可能的將變量存在CPU內部寄存器中而不是通過內存尋址訪問以提高效率
加密
ch = ch ^ *(pwd + i);
采用異或方法進行加密,當然不同的情況可以采用不同的方式進行加密
3 代碼
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**
函數:fun()
功能:文件加密
描述:C語言實現文件加密,執(zhí)行參數有
【原文件路徑及名稱 密碼 加密后文件路徑及名稱】
**/
void encrypt(char *s_file, char *pwd, char *c_file); // 文件加密函數
void encrypt(char *s_file, char *pwd, char *c_file) { // 自定義函數encrypt用于加密
int i = 0;
FILE *fp1, *fp2; // 定義fp1和fp2是指向結構體變量的指針
register char ch;
fp1 = fopen(s_file, "rb");
if (fp1 == NULL) {
printf("無法打開原文件.\n");
exit(1); // 如果不能打開要加密的文件,便退出程序
}
fp2 = fopen(c_file, "wb");
if (fp2 == NULL) {
printf("無法打開被加密的文件.\n");
exit(1); // 如果不能建立加密后的文件,便退出
}
ch = fgetc(fp1);
while (!feof(fp1)) { // 測試文件是否結束
ch = ch ^ *(pwd + i); // 采用異或方法進行加密,也可以采用其他方式方法就行加密
i++;
fputc(ch, fp2); // 異或后寫入fp2文件
ch = fgetc(fp1);
if (i > 9)
i = 0;
}
fclose(fp1);
fclose(fp2);
}
int main(int argc, char const *argv[]) {
char sourcefile[50]; // 被加密的文件名稱
char codefile[50]; // 加密后的文件名
char pwd[10]; // 密碼存儲
if (argc != 4) { // 容錯處理,不滿足參數格式,需要自行輸入
printf("請輸入原文件名稱:\n");
gets(sourcefile); // 得到要加密的文件名
printf("請輸入密碼:\n");
gets(pwd); // 得到密碼
printf("請輸入加密后文件名稱:\n");
gets(codefile); // 得到加密后你要的文件名
encrypt(sourcefile, pwd, codefile);
}
else {
strcpy(sourcefile, argv[1]);
strcpy(pwd, argv[2]);
strcpy(codefile, argv[3]);
encrypt(sourcefile, pwd, codefile);
}
}
示例結果:
$ gcc ex049.c -o demo
$ ./demo
請輸入原文件名稱:
s_file.txt
請輸入密碼:
johngo_py
請輸入加密后文件名稱:
c_file.txt
最后就可以發(fā)現有加密后的文件產出