從網上淘了一段 檔案加密的程式,看完之後,明白了它所謂的檔案加密,其實原理相當簡單:
即是按位元組 或 按位 讀取一個要加密的檔案中的資料,然後與我們自己輸入的密碼做一些 演算法操作,將新的資料寫入到新檔案中,這個新檔案就是我們的加密後的檔案。
於是我就自己設計了一個簡單的密碼編譯演算法,用它實現了檔案的加密,附帶著寫了一個解密演算法。希望供大家參考
#include<stdio.h><br />#include<stdlib.h><br />#include<string.h> </p><p>void encfile(char *in_filename,char *pwd,char *out_filename);/*對檔案進行加密的具體函數*/<br />void decryptfile(char* in_filename,char *pwd,char *out_filename); /*對檔案解密的具體函數*/</p><p>int main(int argc,char *argv[])/*定義main()函數的命令列參數*/<br />{<br />int option; /*功能選擇*/<br />char in_filename[30];/*使用者輸入的要加密的檔案名稱 或是 要解密的檔案*/<br />char out_filename[30]; /*使用者輸入加密後儲存的檔案名稱 或是解密儲存的檔案名稱*/<br />char pwd[8];/*用來儲存密碼*/ </p><p>printf(" thank you for using this program....../n");<br />printf("1. Encrypt a file 2. Decrypt a file/n");<br />printf("chose your option.....");</p><p>scanf("%d",&option);<br />getchar();<br />if(argc!=4){/*容錯處理*/<br />printf("/nPlease input In-filename:/n");<br />gets(in_filename);/*得到要加密的檔案名稱*/<br />printf("Please input your Password:/n");<br />gets(pwd);/*得到密碼*/<br />printf("Please input Out-filename:/n");<br />gets(out_filename);/*得到加密後你要的檔案名稱*/ </p><p>}<br />else{/*如果命令列參數正確,便直接運行程式*/<br />strcpy(in_filename,argv[1]);<br />strcpy(pwd,argv[2]);<br />strcpy(out_filename,argv[3]);<br />} </p><p>switch(option){<br />case 1: //加密<br />encfile(in_filename,pwd,out_filename);/*加密函數調用*/<br />break;<br />case 2://解密<br />decryptfile(in_filename,pwd,out_filename);/*解密函數調用*/<br />break;<br />default:<br />break;<br />}</p><p>system("pause");<br />return 0;<br />} </p><p>/*加密子函數開始*/<br />void encfile(char *in_filename,char *pwd,char *out_file)<br />{<br />FILE *fp1,*fp2;<br />register char ch;<br />int j=0;<br />int j0=0;<br />fp1=fopen(in_filename,"r");/*開啟要加密的檔案*/<br />if(fp1==NULL){<br />printf("cannot open in-file./n");<br />exit(1);/*如果不能開啟要加密的檔案,便退出程式*/<br />}<br />fp2=fopen(out_file,"w");<br />if(fp2==NULL){<br />printf("cannot open or create out-file./n");<br />exit(1);/*如果不能建立加密後的檔案,便退出*/<br />} </p><p>while(pwd[++j0]); </p><p>ch=fgetc(fp1); </p><p>/*密碼編譯演算法開始*/<br />while(!feof(fp1)){<br />if(j0 >7)<br /> j0 = 0;<br />ch += pwd[j0++];<br />fputc(ch,fp2);<br />ch=fgetc(fp1);<br />}<br />fclose(fp1);/*關閉源檔案*/<br />fclose(fp2);/*關閉目標檔案*/<br />} </p><p>/*解密子函數開始*/<br />void decryptfile(char *in_filename,char *pwd,char *out_file)<br />{<br />FILE *fp1,*fp2;<br />register char ch;<br />int j=0;<br />int j0=0;<br />fp1=fopen(in_filename,"r");/*開啟要解密的檔案*/<br />if(fp1==NULL){<br />printf("cannot open in-file./n");<br />exit(1);/*如果不能開啟要解密的檔案,便退出程式*/<br />}<br />fp2=fopen(out_file,"w");<br />if(fp2==NULL){<br />printf("cannot open or create out-file./n");<br />exit(1);/*如果不能建立解密後的檔案,便退出*/<br />} </p><p>while(pwd[++j0]);<br />ch=fgetc(fp1);<br />/*解密演算法開始*/<br />while(!feof(fp1)){<br />if(j0 >7)<br /> j0 = 0;<br />ch -= pwd[j0++];<br />fputc(ch,fp2);/*我的解密演算法*/<br />ch=fgetc(fp1);<br />}<br />fclose(fp1);/*關閉源檔案*/<br />fclose(fp2);/*關閉目標檔案*/<br />}