本文目錄一覽:
如何用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”);
}
c語言 讀取完文件加密後如何儲存並修改呢 求助
大概的改了一下,有什麼問題,再問吧
#include stdio.h
#include stdlib.h
#include math.h
#include string.h
#include conio.h /*建議加入此頭文件,以利於getch()的調用*/
char buffer[100] = {0};
static int c = 1;
int get_text()
{
int i = 0;
char file_name[100] = “a.txt”;
FILE *fp;
if ((fp = fopen(file_name, “r”)) == NULL)
{
fprintf(stderr, “can’t find file %s!\n”, file_name);
return -1;
}
while(i 5)
{
while(1)
{
char ch = fgetc(fp);
if (ch != EOF)
{
buffer[i++] = ch;
}
else
{
break; // 到達文件結尾了
}
}
buffer[i] = ‘\0’;
fclose(fp);
//printf(“nihao \n”);
printf(“%s\n”, buffer); // 輸出結果
return 0;
}
}
int set_psw(char *psw)
{
int i = 0;
char file_name[100] = “b.txt”;
FILE *fp;
if ((fp = fopen(file_name, “w+”)) == NULL)
{
fprintf(stderr, “can’t find file %s!\n”, file_name);
return -1;
}
fputs(psw, fp);
fclose(fp);
return 0;
}
int jiami()
{
char a[256];
int i;
//printf(“請輸入要加密的數字\n”);
//scanf(“%s”,a);
if (get_text() != 0)
{
return -1;
}
for(i = 0; i = strlen(buffer); i++)
{
a[i] = buffer[i];
}
for(i = 0 ; i strlen(a); i++)
{
a[i] = a[i] + c;
}
if (set_psw(a) != 0)
{
return -1;
}
printf(“加密後的密碼為: %s。已保存在b.txt文件中。\n”, a);
printf(“***************\n”);
printf(“***************\n”);
return 0;
}
int jiemi()
{
char b[256];
int i;
scanf(“%s”, b);
for(i = 0 ; i strlen(b); i++)
{
b[i] = b[i] – c;
}
printf(“解密後的密碼為:%s\n”, b);
printf(“***************\n”);
printf(“***************\n”);
printf(“***************\n”);
return 0;
}
void mima(int c)
{
printf(“設置成功\n”);
printf(“********\n”);
printf(“********\n”);
printf(“********\n”);
}
int main()
{
int a;
while (1)
{
printf(“************************* 0 退出程序 *************************\n”);
printf(“************************* 1 進行加密 *************************\n”);
printf(“************************* 2 進行解密 *************************\n”);
printf(“************************* 3 設置密鑰 *************************\n”);
printf(“你要進行的操作是\n”);
scanf(“%d”, a);
switch(a)
{
case 0:
exit(0);
break; // 這裡的break是匹配switch的
case 1:
printf(“請輸入要加密的數字\n”);
jiami();
continue; // 這裡的continue是匹配while(1)的
case 2:
printf(“請輸入要解密的數字\n”);
jiemi();
continue; // 這裡的continue是匹配while(1)的
case 3:
printf(“請輸入四位數密鑰\n”);
scanf(“%d”, c);
mima(c);
continue; // 這裡的continue是匹配while(1)的
}
}
}
C語言文件加密
#includestdio.h
int main()
{char ch;
FILE *fp1,*fp2;
fp1=fopen(“d:\\file1.txt”,”r”);
fp2=fopen(“d:\\file2.txt”,”w”);
printf(“加密後的內容:\n”);
while((ch=fgetc(fp1))!=EOF)
{ch^=0x6a; putchar(ch); fputc(ch,fp2);}
fclose(fp1);
fclose(fp2);
printf(“\n解密後的內容:\n”);
fp2=fopen(“d:\\file2.txt”,”r”);
while((ch=fgetc(fp2))!=EOF)
{ch^=0x6a; putchar(ch);}
return 0;
}
原創文章,作者:CIAB,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/147460.html