單表置換密碼的C++代碼實現(xiàn),供大家參考,具體內(nèi)容如下
本程序使用方法:需要在本程序所在的文件夾創(chuàng)建一個"密碼學(xué).txt"文檔。
該程序所需要的數(shù)據(jù)全部由該文檔提供,然后運行即可得到結(jié)果,如需要修改數(shù)據(jù),必須從文檔中人工修改
文檔格式的要求:文檔總共包含兩行。第一行由一個1或2的數(shù)字和一個字符串組成,數(shù)字1代表加密,2代表解密,字符串表示密鑰
第二行僅包含一個字符串,這個字符串是需要加密或解密的內(nèi)容。
該程序運行結(jié)果直接由控制臺輸出
運行結(jié)果:
代碼:
#include<iostream> #include<string> #include<fstream> using namespace std; ifstream in("密碼學(xué).txt"); void JiaMi(char ZhiHuan[]); //加密函數(shù) void JieMi(char ZhiHuan[]); //解密函數(shù) void setZhiHuan(char ZhiHuan[],char fanZhiHuanBiao[]); //設(shè)置置換表函數(shù) int main() { int m; //確定是加密或解密?加密為1,解密為2 char ZhiHuanBiao['z'+1]; //正向置換表,加密時用 char fanZhiHuanBiao['Z'+1]; //反向置換表,解密時用 cout<<"加密按輸入1,解密輸入2"<<endl; in>>m; //讀入m setZhiHuan(ZhiHuanBiao, fanZhiHuanBiao); //設(shè)置置換表 switch(m) //判斷m值,執(zhí)行相應(yīng)的功能 { 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是循環(huán)變量,除此之外沒有任何意義 char j; string s; //密鑰 cout<<"請輸入密鑰(大寫):"; getline(in,s); //讀入密鑰 cout<<s<<endl; //輸出密鑰 cout<<"置換表為:"<<endl; string s1; for(i = 0 ; i < s.length();i++) //對密鑰進(jìn)行處理(去掉空格和重復(fù)的字符) { bool sign =0; //標(biāo)志變量 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++) //該循環(huán)利用密鑰得到置換表 { 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++) //該循環(huán)利用置換表得到反置換表 { fanZhiHuanBiao[ ZhiHuanBiao[i] ] = i; } for( i='A'; i<= 'Z'; i++) //輸出反置換表 { cout<< fanZhiHuanBiao[i] <<" "; } cout<<endl; }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站chinadenli.net,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)站欄目:C++實現(xiàn)單置換密碼-創(chuàng)新互聯(lián)
文章起源:http://chinadenli.net/article48/ddidep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、ChatGPT、網(wǎng)站建設(shè)、搜索引擎優(yōu)化、微信小程序、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容