古詩詞大全網 - 藝術簽名 - 如何用C語言對文件進行加密和解密?

如何用C語言對文件進行加密和解密?

對於加密要求不高的完全可以自己定義規則來進行加密。這種加密是很簡單很自由的,例如妳在存文件的時候可以將文件中的每個字符都加上壹個數,然後讀取該文件的時候再每個字符相應地減去那個數,即可實現就簡單的加密,這樣妳儲存的文件看上去就是亂碼了。只是這個規則太簡單,規則妳可以自己定,加密與解密對著來就行了。

下面程序用異或操作對文件進行加密和解密

/****************** 設計思路 ******************/

// 根據用戶輸入的加密/機密密碼,

// 每次都拿原文件和密碼等長度的壹個字符串和密碼

// 對應元素異或進行加密/解密

// 另外因為是用異或方法,所以加密和解密就是同壹個程序

// 即按照同樣的加密即是對文件的解密

#include <stdio.h>

#include <string.h>

#include <ctype.h>

#include <conio.h>

#include <stdlib.h>

char filename[256]; // 原文件

char password[256]; // 加密/解密密碼

const char filenametemp[] = "temp15435255435325432543.temp"; // 加密/解密中間文件

void inputpass(char *pass); //密碼輸入以"******"顯示

void main() {

FILE *fp; // 加密/解密的文件

FILE *fptemp; // 加密/解密過程臨時文件

int pwdlen; // 密碼長度

int i = 0; // 計數器

char ch = 0; // 讀入的字符

printf("請輸入要加密/解密的文件名(全路徑名): \n");

gets(filename);

if( (fp = fopen(filename, "rb")) == NULL) {

printf("找不到文件 %s\n", filename);

exit(1);

} // if

printf("請輸入要加密/解密的密碼: \n");

inputpass(password);

pwdlen = strlen(password);

if(pwdlen == 0) {

printf("密碼不能為空,加密/解密失敗\n");

exit(1);

} // if

fptemp = fopen(filenametemp, "wb"); // 打開中間文件

while(1) {

ch = fgetc(fp);// 從原文件讀入壹個字符

if(feof(fp)) { // 已經讀到文件尾

break; // 退出循環

}

ch ^= password[i++]; // 對原字符和密碼進行異或操作

fputc(ch, fptemp); // 將異或結果寫入中間文件

if(i == pwdlen) { // 使得原文件每和密碼長度相同的固定長度異或加密

i = 0;

}

} // while

fclose(fp); // 關閉打開原文件

fclose(fptemp); // 關閉打開中間文件

remove(filename); // 刪除原文件

rename(filenametemp, filename); // 將中間文件重命名為原文件

printf("加密/解密成功\n"); // 至此加密/解密成功

}

// 密碼輸入以"******"顯示

void inputpass(char *pass) {

int i = 0;

char c;

while(isprint(c = getch())) {

pass[i++] = c;

// printf("*");

}

pass[i] = '\0';

printf("\n");

}