国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++實現單置換密碼

2020-01-26 13:30:15
字體:
來源:轉載
供稿:網友

單表置換密碼的C++代碼實現,供大家參考,具體內容如下

本程序使用方法:需要在本程序所在的文件夾創建一個"密碼學.txt"文檔。

該程序所需要的數據全部由該文檔提供,然后運行即可得到結果,如需要修改數據,必須從文檔中人工修改
文檔格式的要求:文檔總共包含兩行。第一行由一個1或2的數字和一個字符串組成,數字1代表加密,2代表解密,字符串表示密鑰
第二行僅包含一個字符串,這個字符串是需要加密或解密的內容。
該程序運行結果直接由控制臺輸出

運行結果:

代碼:

#include<iostream>#include<string>#include<fstream>using namespace std;ifstream in("密碼學.txt");void JiaMi(char ZhiHuan[]);   //加密函數void JieMi(char ZhiHuan[]);   //解密函數void setZhiHuan(char ZhiHuan[],char fanZhiHuanBiao[]);  //設置置換表函數int main(){ int m;    //確定是加密或解密?加密為1,解密為2 char ZhiHuanBiao['z'+1];   //正向置換表,加密時用 char fanZhiHuanBiao['Z'+1];  //反向置換表,解密時用 cout<<"加密按輸入1,解密輸入2"<<endl; in>>m;    //讀入m setZhiHuan(ZhiHuanBiao, fanZhiHuanBiao); //設置置換表 switch(m) //判斷m值,執行相應的功能 { case 1: JiaMi(ZhiHuanBiao);break; case 2: JieMi(fanZhiHuanBiao);break; default:break; } return 0;}void JiaMi(char ZhiHuan[]) //加密{ string MingWen;  //保存明文 cout<<endl<<"請輸入明文:"; getline(in,MingWen); //讀入明文 cout<<MingWen<<endl;   cout<<"加密后的密文為:"<<endl; for(int i=0; i<MingWen.length(); i++) //直接利用置換表輸出密文 { if(MingWen[i]>='a' && MingWen[i]<='z') cout<<ZhiHuan[ MingWen[i] ]; else cout<<MingWen[i]; } cout<<endl;}void JieMi(char fanZhiHuan[]){ string MiWen;  //保存密文 cout<<endl<<"請輸入密文:"; getline(in,MiWen); //讀入密文 cout<<MiWen<<endl; cout<<"解密后的明文為:"<<endl; for(int i=0; i<MiWen.length(); i++) //直接利用反置換表輸出明文 { if(MiWen[i]>='A' && MiWen[i]<='Z') cout<<fanZhiHuan[ MiWen[i] ]; else cout<<MiWen[i]; } cout<<endl;}void setZhiHuan(char ZhiHuanBiao[],char fanZhiHuanBiao[]){ int i;  //i和j是循環變量,除此之外沒有任何意義 char j; string s;  //密鑰 cout<<"請輸入密鑰(大寫):";  getline(in,s); //讀入密鑰 cout<<s<<endl; //輸出密鑰 cout<<"置換表為:"<<endl; string s1;     for(i = 0 ; i < s.length();i++) //對密鑰進行處理(去掉空格和重復的字符) { bool sign =0;  //標志變量 if(s[i] >= 'A' && s[i] <='Z') { for(int j = 0; j < s1.length();j++) { if(s[i] == s1[j]) {  sign = 1;  break; } } if(sign == 0) s1 = s1 + s[i]; else sign = 0; } } for( j ='a';j<='z';j++)cout<<j<<" ";cout<<endl; //輸出小寫字母 從a到z  char ch='A'; for( i = 'a' ;i <= 'z'; i++) //該循環利用密鑰得到置換表 { if(i < 'a' + s1.length()) //前面直接用s1代替 {  ZhiHuanBiao[i] = s1[i-'a'];   } else //后面將剩下的"貼"上去 {  for(int j = 'a'; j < 'a' + s1.length(); j++) { if(ch == ZhiHuanBiao[j]) {  ch++;  j= 'a'; //每次都從頭開始搜索  continue; } } ZhiHuanBiao[i] = ch;  ch++; } cout<<ZhiHuanBiao[i]<<" "; //同時輸出置換表 } cout<<endl; for( i='a'; i<= 'z'; i++) //該循環利用置換表得到反置換表 { fanZhiHuanBiao[ ZhiHuanBiao[i] ] = i; } for( i='A'; i<= 'Z'; i++) //輸出反置換表 { cout<< fanZhiHuanBiao[i] <<" "; } cout<<endl;}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新兴县| 马尔康县| 荃湾区| 贵南县| 苏尼特左旗| 巴林左旗| 利川市| 炎陵县| 漳浦县| 阜新| 庆城县| 沾益县| 扎兰屯市| 石河子市| 贵港市| 建水县| 积石山| 墨玉县| 响水县| 宣汉县| 老河口市| 威远县| 蓬溪县| 宣武区| 特克斯县| 永济市| 武威市| 临清市| 叶城县| 常宁市| 通河县| 焦作市| 榆中县| 嘉禾县| 塔城市| 寻甸| 镇巴县| 灵璧县| 上饶县| 枣阳市| 都兰县|