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