C++ 簡單的檔案加密和解密 執行個體

來源:互聯網
上載者:User

從網上淘了一段 檔案加密的程式,看完之後,明白了它所謂的檔案加密,其實原理相當簡單:

 

      即是按位元組 或 按位 讀取一個要加密的檔案中的資料,然後與我們自己輸入的密碼做一些 演算法操作,將新的資料寫入到新檔案中,這個新檔案就是我們的加密後的檔案。

 

     於是我就自己設計了一個簡單的密碼編譯演算法,用它實現了檔案的加密,附帶著寫了一個解密演算法。希望供大家參考

#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 />}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.