最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實現(xiàn)單置換密碼

 更新時間:2019年03月22日 09:05:56   作者:JinJie_Zhang  
這篇文章主要為大家詳細介紹了C++實現(xiàn)單置換密碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下

單表置換密碼的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++) //對密鑰進行處理(去掉空格和重復(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;
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++ sort排序函數(shù)用法詳解

    C++ sort排序函數(shù)用法詳解

    本文主要介紹了C++ sort排序函數(shù)用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C語言中0、‘\0‘、‘0‘、NULL以及類型轉(zhuǎn)化

    C語言中0、‘\0‘、‘0‘、NULL以及類型轉(zhuǎn)化

    在C語言中, NULL和0的值都是一樣的,但是為了目的和用途及容易識別的原因,下面這篇文章主要給大家介紹了關(guān)于C語言中0、‘\0‘、‘0‘、NULL以及類型轉(zhuǎn)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • C語言實現(xiàn)linux網(wǎng)卡檢測精簡版

    C語言實現(xiàn)linux網(wǎng)卡檢測精簡版

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)linux網(wǎng)卡檢測的精簡版,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • C語言所有經(jīng)典排序方法的實現(xiàn)代碼

    C語言所有經(jīng)典排序方法的實現(xiàn)代碼

    這篇文章給大家分享C語言所有經(jīng)典排序方法,文章給大家提供完整的實例代碼幫助大家快速學(xué)習(xí)掌握C語言排序方法,感興趣的朋友一起看看吧
    2021-06-06
  • 創(chuàng)建二叉樹 二叉樹如何刪除節(jié)點操作教程

    創(chuàng)建二叉樹 二叉樹如何刪除節(jié)點操作教程

    本文將詳細介紹二叉樹的創(chuàng)建,節(jié)點刪除,節(jié)點增加等一系列操作方法,需要的朋友可以參考下
    2012-12-12
  • unsigned中無符號是什么詳析

    unsigned中無符號是什么詳析

    unsigned為“無符號”的意思,unsigned,zerofill既為非負數(shù),用此類型可以增加數(shù)據(jù)長度,下面這篇文章主要給大家介紹了關(guān)于unsigned中無符號是什么的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 用c語言實現(xiàn)HUP信號重啟進程的方法

    用c語言實現(xiàn)HUP信號重啟進程的方法

    本篇文章是對使用c語言實現(xiàn)HUP信號重啟進程的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 通過一個小例子來簡單理解C語言中的內(nèi)存空間管理

    通過一個小例子來簡單理解C語言中的內(nèi)存空間管理

    這篇文章主要介紹了通過一個小例子來簡單理解C語言中的內(nèi)存空間管理,涉及到堆和棧等數(shù)據(jù)結(jié)構(gòu)的基本知識,需要的朋友可以參考下
    2015-11-11
  • C語言入門之指針用法教程

    C語言入門之指針用法教程

    這篇文章主要介紹了C語言入門之指針用法教程,主要對C語言中指針的本質(zhì)及常見用法做了較為通俗易懂的分析,是后續(xù)深入學(xué)習(xí)C語言的基礎(chǔ),需要的朋友可以參考下
    2014-09-09
  • C語言尋找無向圖兩點間的最短路徑

    C語言尋找無向圖兩點間的最短路徑

    這篇文章主要為大家詳細介紹了C語言尋找無向圖兩點間的最短路徑,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評論

永嘉县| 长垣县| 漯河市| 贡嘎县| 灯塔市| 永嘉县| 旅游| 南木林县| 盐源县| 荥阳市| 绥棱县| 平邑县| 渝北区| 呼玛县| 漾濞| 益阳市| 霞浦县| 新疆| 怀安县| 陆良县| 平南县| 阳高县| 日喀则市| 伊春市| 荆州市| 威远县| 鲜城| 敦化市| 澄迈县| 阿城市| 太谷县| 丹东市| 岱山县| 怀来县| 江川县| 富平县| 甘洛县| 黄冈市| 东乡族自治县| 朔州市| 江孜县|