文档库 最新最全的文档下载
当前位置:文档库 › c语言实现置换密码

c语言实现置换密码

c语言实现置换密码
c语言实现置换密码

//单置换密码的编程实现(C++)

//作者信息:

//

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

//该程序所需要的数据全部由该文档提供,然后运行即可得到结果,如需要修改数据,必须从文档中人工修改

//文档格式的要求:文档总共包含两行。第一行由一个1或2的数字和一个字符串组成,数字1代表加密,2代表解密,字符串表示密钥

//第二行仅包含一个字符串,这个字符串是需要加密或解密的内容。

//该程序运行结果直接由控制台输出

运行结果:

#include

#include

#include

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"<

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<

getline(in,MingWen); //读入明文

cout<

cout<<"加密后的密文为:"<

for(int i=0; i

if(MingWen[i]>='a' && MingWen[i]<='z')

cout<

else cout<

}

cout<

}

void JieMi(char fanZhiHuan[])

{

string MiWen; //保存密文

cout<

getline(in,MiWen); //读入密文

cout<

cout<<"解密后的明文为:"<

for(int i=0; i

if(MiWen[i]>='A' && MiWen[i]<='Z')

cout<

else cout<

}

cout<

}

void setZhiHuan(char ZhiHuanBiao[],char fanZhiHuanBiao[])

{

int i; //i和j是循环变量,除此之外没有任何意义

char j;

string s; //密钥

cout<<"请输入密钥(大写):";

getline(in,s); //读入密钥

cout<

cout<<"置换表为:"<

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<

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<

cout<

for( i='a'; i<= 'z'; i++) //该循环利用置换表得到反置换表{

fanZhiHuanBiao[ ZhiHuanBiao[i] ] = i;

}

for( i='A'; i<= 'Z'; i++) //输出反置换表

{

cout<< fanZhiHuanBiao[i] <<" ";

}

cout<

}

宣传组♂逆天 12:26:39

我想问问念哥准备怎么重写?重写的话剧情能否写得更紧凑,会不会坚持写下去?烦劳楼主帮我问问!谢谢!

念哥考率过写双线没?如果可以能不能双线写呢?

我想问念哥什么时候准备去其他网站,去哪个网站。。。

一个问题,很重要,这部书还写吗? 我觉得念哥可以先把人界当成一本书,写完人界就当是完成一本书了,这样会稍微减弱压迫感

念哥准备花多长时间构思,新书每天能保证几更。会改变很多么

1.我认为念哥在人界写的太长了,那什么仙界的岂不是也那么长?对于念哥这样的新人写手,短一点比较好。

2.感情戏还是要有一些的,好的感情戏会让整本书添色不少。罗梁和紫芸儿的感情发展的太快了,爱情之中必定会有阻碍的,凌洪天的实力也太弱了吧?几拳就K.O.了……

3.念哥不要经常TJ小说啊,这会使你的名誉值大大减少的……

(PS:念哥,看你现在的状态好像快要TJ了啊……)

为什么书名“天将红”之前不是叫“修罗重生传”的吗?感觉叫天将红不够贴切吧…

相关文档