您好,登錄后才能下訂單哦!
本篇內容主要講解“c語言中的文件加密與解密怎么實現”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“c語言中的文件加密與解密怎么實現”吧!
本程序是一個c語言的大作業的一部分
是簡單的基于給定密鑰實現的加密解密程序
文件的傳輸會有明文和密文的區別,明文發送是不安全的。
本題目實現對文件的加密和解密操作,采用的加密算法是根據密鑰將明文中的字母置換為其它字母,所有字母不區分大小寫,不考慮除英文字母外的字符。
例如:
明文是:They will arrive tomorrow,密鑰k=Monday
① 設置英文字母與0到25有如下的對應關系:
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
②依據上述對應關系將明文和密鑰轉化為一組數字:
k=(12,14,13,3,0,24)
m=(19,7,4,24,22,8,11,11,0,17,17,8,21,4,19,14,12,14,17,17,14,22)
③將明文數字依據密鑰長度分段,并逐一與密鑰數字相加(模26),得到密文數字,即:
19 | 7 | 4 | 24 | 22 | 8 | 11 | 11 | 0 | 17 | 17 | 8 | 21 | 4 | 19 | 14 | 12 | 14 | 17 | 17 | 14 | 22 |
12 | 14 | 13 | 3 | 0 | 24 | 12 | 14 | 13 | 3 | 0 | 24 | 12 | 14 | 13 | 3 | 0 | 24 | 12 | 14 | 13 | 3 |
5 | 21 | 17 | 1 | 22 | 6 | 23 | 25 | 13 | 20 | 17 | 6 | 7 | 18 | 6 | 17 | 12 | 12 | 3 | 5 | 1 | 25 |
C=(5,21,17,1,22,6,23,25,13,20,17,6,7,18,6,17,12,12,3,5,1,25)
④依據字母和數字對應關系將密文數字轉換為字母串,即密文為:
c=FVRBWGXZNURGHSGRMMDFBZ
主函數提供功能菜單供用戶選擇,用戶可以選擇調用以下各個功能,也可以選擇退出程序。
加密:對給定文件file1.txt內容按照密鑰k=Monday進行加密,加密后密文寫到文件file2.txt中;
解密:對給定密文文件file3.txt 利用密鑰k=Monday進行解密,解密后的明文存放在文件file4.txt中;
#include<stdio.h> int key[6]={12,14,13,3,0,24};//定義密鑰 int complex(); int simplify(); int main() { int i=0,j=0; printf("功能如下\n1.加密\n2.解密\n3.退出\n"); printf("請輸入您所需功能對應的序號:(例:如需調用加密功能,便打出1即可)\n"); for(;;)//直到輸入3時才會退出 { scanf("%d",&i); if(i==1)j=complex(); if(i==2)j=simplify(); if(i==3)break; if(j==1)printf("\n功能實現成功\n"); if(j==0)printf("\n功能實現失敗\n"); } return 0; } int complex() //加密 { FILE *pin, *pout; pin = fopen("file1.txt","r"); pout= fopen("file2.txt","w"); int k=0; char Ming[1000],Mi[1000],*p=Ming,*q=Mi; fgets(Ming,1000,pin); //puts(Ming); for(;*p!='\0';p++) { if(*p>='a'&&*p<='z') { *q=(*p-97+key[k])%26+65;// printf(" %d %d %c\n",*(key+k),k,*q); k=k+1;q++; if(k==6)k=0; } if(*p>='A'&&*p<='Z') { *q=(*p-65+key[k])%26+65;// printf(" %d %d %c\n",*(key+k),k,*q); k=k+1;q++; if(k==6)k=0; } } *q='\0'; //printf("密文為:"); //puts(Mi); fputs(Mi,pout); fclose(pin); fclose(pout); return 1; } int simplify()//解密 { FILE *pin, *pout; pin = fopen("file3.txt","r"); pout= fopen("file4.txt","w");//打開文件 int k=0; //定義密鑰 //k的意義是讓密匙能夠循環使用 char Ming[1000],Mi[1000],*p=Mi,*q=Ming;//定義密文,明文字符串 fgets(Mi,1000,pin);//從文件3讀取密文 for(;*p!='\0';p++)//解密 { if(*p>='A'&&*p<='Z') { *q=(*p-65+26+26-*(key+k))%26+65;//printf(" %d %d %c\n",*(key+k),k,*q);//檢驗key出沒出問題 k=k+1;q++; if(k==6)k=0;//這兩行代碼讓密鑰循環使用 } } *q='\0';//使字符串結束 fputs(Ming,pout);//puts(Ming);檢驗輸出結果//導出加密結果 fclose(pin); fclose(pout); //關閉兩個文件 return 1; }
到此,相信大家對“c語言中的文件加密與解密怎么實現”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。