gpt4 book ai didi

C++实现单置换密码

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 39 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章C++实现单置换密码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

单表置换密码的C++代码实现,供大家参考,具体内容如下 。

本程序使用方法:需要在本程序所在的文件夹创建一个"密码学.txt"文档.

该程序所需要的数据全部由该文档提供,然后运行即可得到结果,如需要修改数据,必须从文档中人工修改 文档格式的要求:文档总共包含两行。第一行由一个1或2的数字和一个字符串组成,数字1代表加密,2代表解密,字符串表示密钥 第二行仅包含一个字符串,这个字符串是需要加密或解密的内容。 该程序运行结果直接由控制台输出 。

运行结果:

C++实现单置换密码

代码:

?
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#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;
}

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

最后此篇关于C++实现单置换密码的文章就讲到这里了,如果你想了解更多关于C++实现单置换密码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com