多表代换密码playfair的实现
更新时间:2024-07-10 05:53:01 阅读量: 综合文库 文档下载
- 多表代换密码实验推荐度:
- 相关推荐
一. 问题描述:
著名的多表古典加密体制使Playfair,它将明文中的双字母组合作为一个单元对待,并将这些单元转换为密文双字母组合。Playfair算法基于使用一个5×5字母矩阵,该矩阵使用一个关键词构造。这里有一个例子,是由Lord Peter Wimsey在Dorothy Sayer的书《Have His Carcase》中解答的。 M O N A R C H Y B D E F G I/J K L P Q S T U V W X Z
在这里,该关键词是monarchy。该矩阵该矩阵是这样构造的;从左至右、从上至下填入该关键词的字母(去除重复字母),然后再以字母表顺序将余下的字母填入矩阵剩余空间。字母I和J 被算作一个字母。Playfair根据下列规则一次对明文的两个字母加密: (1)、属于相同对中的重复的明文字母将用一个填充字母进行分隔,因此,词balloon将被加密为ba lx lo on。 (2)、属于该矩阵相同行的明文字母将由其右边的字母替代,而行的最后一个字母由行的第一个字母代替。例如,ar被加密为RM。 (3)、属于相同列的明文字母将由它下面的字母代替,而列的最后一个字母由列的第一个字母代替。例如,mu被加密为CM。 (4)、否则,明文的其他字母将由与其同行,且与下一个同列的字母代替。因此,hs成为BP,ea成为IM(或JM,这可根据加密者的意愿而定)。 基本要求: 二. 基本要求:
根据多表代换密码的特点,编写playfair软件,并以monarchy密钥进行测试,验证加密结果。 三. 实验代码:
#include
void decrypt();//解密函数 void encrypt();//加密函数 void main() {
cout<<\ cout<<\ |\ cout<<\ 多表代换密码Playfair的实现 |\ cout<<\ 欢迎使用本程序 |\ cout<<\
- 1 -
int n=0; for(;n!=3;) { cout<<\ ____________________________\ cout<<\ | 选择你所需要的操作: |\ cout<<\ | 1.为字符串加密 |\ cout<<\ | 2.为字符串解密 |\ cout<<\ | 3.结 束 程 序 |\ cout<<\ |___________________________|\ cout<<\ 选择操作:\ cin>>n; if(n<1||n>3)cout<<\无该项操作,请重来:\ switch(n) { case 1: cout<<\ cout<<\ 加密结束 |\ cout<<\ encrypt(); break; case 2: cout<<\ cout<<\ 解密结束 |\ cout<<\ decrypt(); break; case 3: cout<<\ cout<<\ 程序结束,谢谢您的使用! ^_^ |\ cout<<\ cout< void encrypt() { const int N=100; char letters[26]=\用于填充矩阵 int flag[25]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//字母是否已在矩阵中,与letters数组对应 - 2 - char ch[5][5];//5X5矩阵 char ch1[N];//密钥 char ch2[N];//明文 char ch4;//无关字符 int len='a'-'A'; cout<<\输入密钥:\ cin>>ch1; int flg=1; while(flg==1) { for(int i=0;i if(flg==1) { for(i=0;i //把密钥中的字母填入到矩阵中,并把该字母标记为已用 for(int k=0;k - 3 - ch[i][j]=letters[k]; flag[k]=1; if(j<4)j++; else{i++;j=0;} } } cout<<\密钥填充后的矩阵为: \for(i=0;i<5;i++) for(j=0;j<5;j++) { cout< //为明文添加必要的无关字符以防止同一组的两个字符相同 for( k=0;k //若明文有奇数个字符,则添加一个无关字符以凑够偶数个 if(strlen(ch2)%2!=0) - 4 - { ch2[strlen(ch2)+1]=ch2[strlen(ch2)];//字符串结尾赋'\\0' ch2[strlen(ch2)]=ch4;//明文串尾插入无关字符 } cout<<\经过处理后的明文为:\for(k=0;k cout<<\其最终长度为:\ //////////////////明文输入并整理完毕/////////////////////////////// for(k=0;k - 5 - else {ch2[k]=ch[m1][n2]; ch2[k+1]=ch[m2][n1]; } } } cout<<\加密后所得到的密文是:\ for(k=0;k //解密算法 void decrypt() { const int N=100; char letters[26]=\用于填充矩阵 int flag[25]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //标记字母是否已在矩阵中,与letters数组对应 char ch[5][5];//5X5矩阵 char ch1[N];//密钥 char ch2[N];//密文 int len='a'-'A'; int flg=1; cout<<\输入密钥:\ cin>>ch1; while(flg==1) { for(int i=0;i if(flg==1) { for(i=0;i { if(ch1[i]=='J')ch1[i]='I'; } - 6 - i=0;int j=0; //把密钥中的字母填入到矩阵中,并把该字母标记为已用 for(int k=0;k for( k=0;k<25;k++)//按字母表顺序把未用字母依次填入到矩阵中 { if(flag[k]==0) { ch[i][j]=letters[k]; flag[k]=1; if(j<4)j++; else{i++;j=0;} } } cout<<\密钥填充后的矩阵为: \for(i=0;i<5;i++) for(j=0;j<5;j++) { cout< - 7 - ch2[k]=ch2[k]-len; } for( k=0;k for( k=0;k - 8 - m2=m2%5; if(n1>4){n1=n1%5;m1=m1+1;} if(n2>4){n2=n2%5;m2=m2+1;} if(m1==m2) {ch2[k]=ch[m1][(n1+4)%5]; ch2[k+1]=ch[m2][(n2+4)%5]; } else { if(n1==n2) { ch2[k]=ch[(m1+4)%5][n1]; ch2[k+1]=ch[(m2+4)%5][n2]; } else { ch2[k]=ch[m1][n2]; ch2[k+1]=ch[m2][n1]; } } } cout<<\解密后所得到的明文是:\ for(k=0;k else break; } } 四. 测试情况: ____________________________________________ | | | 多表代换密码Playfair的实现 | | 欢迎使用本程序 | |____________________________________________| ____________________________ | 选择你所需要的操作: | | 1.为字符串加密 | | 2.为字符串解密 | | 3.结 束 程 序 | |___________________________| 选择操作:1 - 9 - __________________________________________ | 加密结束 | |_________________________________________| 输入密钥:123 请重新选择操作: ____________________________ | 选择你所需要的操作: | | 1.为字符串加密 | | 2.为字符串解密 | | 3.结 束 程 序 | |___________________________| 选择操作:1 __________________________________________ | 加密结束 | |_________________________________________| 输入密钥:monarchy 密钥填充后的矩阵为: M O N A R C H Y B D E F G I K L P Q S T U V W X Z 请输入明文:sunhongguo 输入无关字符:x 经过处理后的明文为:SU NH ON GX GU OX 其最终长度为:12 加密后所得到的密文是:LX OY NA IW EW AV ____________________________ | 选择你所需要的操作: | | 1.为字符串加密 | | 2.为字符串解密 | | 3.结 束 程 序 | |___________________________| 选择操作:2 __________________________________________ | 解密结束 | |_________________________________________| 输入密钥:monarchy 密钥填充后的矩阵为: M O N A R C H Y B D E F G I K L P Q S T U V W X Z - 10 - 请输入密文:sun 字符串不能为奇数个!请重新输入。 请输入密文:sunhongg 同一分组中不能出现相同字符!请重新输入。 请输入密文:lxoynaiwewav 解密后所得到的明文是:SU NH ON GX GU OX ____________________________ | 选择你所需要的操作: | | 1.为字符串加密 | | 2.为字符串解密 | | 3.结 束 程 序 | |___________________________| 选择操作:9 无该项操作,请重来: ____________________________ | 选择你所需要的操作: | | 1.为字符串加密 | | 2.为字符串解密 | | 3.结 束 程 序 | |___________________________| 选择操作:rytery 无该项操作,请重来: ____________________________ | 选择你所需要的操作: | | 1.为字符串加密 | | 2.为字符串解密 | | 3.结 束 程 序 | |___________________________| 选择操作:3 __________________________________________ | 程序结束,谢谢您的使用! ^_^ | |_________________________________________| 请按任意键继续. . . 五. 总结 Playfair加密与解密过程是一样的,本程序在最初设计时未考虑容错能力,经老师指导,做简单修改后,已经具备容错能力,详细测试情况见四。 - 11 - 请输入密文:sun 字符串不能为奇数个!请重新输入。 请输入密文:sunhongg 同一分组中不能出现相同字符!请重新输入。 请输入密文:lxoynaiwewav 解密后所得到的明文是:SU NH ON GX GU OX ____________________________ | 选择你所需要的操作: | | 1.为字符串加密 | | 2.为字符串解密 | | 3.结 束 程 序 | |___________________________| 选择操作:9 无该项操作,请重来: ____________________________ | 选择你所需要的操作: | | 1.为字符串加密 | | 2.为字符串解密 | | 3.结 束 程 序 | |___________________________| 选择操作:rytery 无该项操作,请重来: ____________________________ | 选择你所需要的操作: | | 1.为字符串加密 | | 2.为字符串解密 | | 3.结 束 程 序 | |___________________________| 选择操作:3 __________________________________________ | 程序结束,谢谢您的使用! ^_^ | |_________________________________________| 请按任意键继续. . . 五. 总结 Playfair加密与解密过程是一样的,本程序在最初设计时未考虑容错能力,经老师指导,做简单修改后,已经具备容错能力,详细测试情况见四。 - 11 -
正在阅读:
多表代换密码playfair的实现07-10
鲁迅杂文精选读书心得五篇04-30
国家农业综合开发投资参股经营试点管理办法(财发39号)07-11
浙江省丽水市科学中考试题及参考答案(Word版) - 图文03-21
建筑工程管理学习总结03-14
路基土方施工创优总结及施工工法 - 图文12-21
五年级上品社教案05-31
质量控制及管理策划08-09
2011年江苏省广电报评选结果公示10-25
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 代换
- playfair
- 密码
- 实现
- 太阳能光伏发电系统照明系统的设计报告
- 说课稿
- 2015梅州公务员考试行测:绝对法挑战言语理解
- 中国合格评定国家认可委员会 - 图文
- 会议纪要
- 重庆市绿色物流发展研究
- 给儿子的一封信10篇
- 2019-201X学年度下学期学校德育工作总结word版本(17页)
- 连杆部件设计规范2010-10-31 - 图文
- 高三物理考前复习浅议
- 冀教版四年级语文上册知识点
- 电梯-消防设备 要求技术指标
- 高考完型填空训练
- Aadvxmu雅思口语王子吴慧冬内部资料 I F原则
- 试析广东省近年来重特大火灾事故的特点
- 计算机病毒及防护教案
- 关于大学生志愿服务西部计划工作的调研报告
- 合同法讲稿(15-10-16)
- 药物代谢动力学--练习
- 初中语文新课改论文 新课改下中学语文教学的特征与方法的创新