当前位置:主页 > c/c++教程 > C++实现单置换密码

C++实现单置换密码

发布:2022-09-12 09:43:36 59


本站精选了一篇C++相关的编程文章,网友关弘大根据主题投稿了本篇教程内容,涉及到C++单置换密码、C++置换密码、C++换密码、C++实现单置换密码相关内容,已被989网友关注,如果对知识点想更进一步了解可以在下方电子资料中获取。

C++实现单置换密码

单表置换密码的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;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。


相关文章

  • VC++中进程与多进程管理的方法详解

    发布:2021-05-28

    这篇文章主要介绍了VC++中进程与多进程管理的方法,以实例形式详细分析了进程与多进程管理中所涉及的进程、子进程、进程的互斥运行与进程的结束等概念与具体实现方法,非常具有参考借鉴价值,需要的朋友可以参考下


  • C++类与对象的详细说明

    发布:2022-04-16

    这篇文章主要为大家详细介绍了C++的类与对象,使用数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助


  • C++保存txt文件实现方法代码实例

    发布:2022-04-08

    这篇文章主要介绍了C++保存txt文件实现方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下


  • C/C++实现控制台输出不同颜色字体的实例讲解

    发布:2021-05-30

    这篇文章主要介绍了C/C++实现控制台输出不同颜色字体的方法,涉及C++控制台文字属性相关设置操作技巧,需要的朋友可以参考下


  • JNI实现最简单的JAVA调用C/C++实例代码讲解

    发布:2019-09-02

    这篇文章主要介绍了JNI实现最简单的JAVA调用C/C++代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • C语言实现C++继承和多态的实例内容

    发布:2021-06-10

    本文主要给大家简单讲诉了C和C++的区别以及如何使用C语言模拟实现C++继承和多态,并附上示例代码,是篇相当不错的文章,推荐给喜欢C语言的小伙伴们


  • 一篇文章带你了解C++特殊类的设计

    发布:2022-04-04

    这篇文章主要为大家详细介绍了C++特殊类的设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助


网友讨论