




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include<iostream>#include<cstring>using namespace std;/加密算法void encrypt()const int n=100;char letters26="abcdefghiklmnopqrstuvwxyz"/用于填充矩阵int flag25=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 ch55;/5x5矩阵char ch1n;/密钥char ch2n;/明文char ch4;/无关字
2、符int len='a'-'a'cout<<"输入密钥(a-z):"cin>>ch1;int flg=1;while(flg=1)for(int i=0;i<strlen(ch1);i+)/把所输入的密钥转化为大写字母if(ch1i>'z'|ch1i<'a')cout<<"请重新选择操作:"<<endl; flg=0;break;elsech1i=ch1i-len; if(flg=1)for(i=0;i<strlen(c
3、h1);i+)/把密钥中的j都变为iif(ch1i='j')ch1i='i'i=0;int j=0; /把密钥中的字母填入到矩阵中,并把该字母标记为已用for(int k=0;k<strlen(ch1);k+) for(int t=0;t<25;t+)if(ch1k=letterst&&flagt=0)chij=letterst;flagt=1;if(j<4)j+;else i+;j=0;for( k=0;k<25;k+)/按字母表顺序把未用字母依次填入到矩阵中if(flagk=0)chij=lettersk;flagk=
4、1;if(j<4)j+;elsei+;j=0;cout<<"密钥填充后的矩阵为: "<<endl;for(i=0;i<5;i+) for(j=0;j<5;j+)cout<<chij;cout<<" "if(j=4) cout<<endl;cout<<endl;cout<<"请输入明文(大写英文字符a-z):"cin>>ch2;cout<<"输入一个无关字符:"cin>>ch4;i
5、f(ch4>='a')ch4=ch4-len;for(k=0;k<strlen(ch2);k+)/把所输入的明文转化为大写字母if(ch2k>='a')ch2k=ch2k-len;for(k=0;k<strlen(ch2);k+)/把明文中的j都变为iif(ch2k='j')ch2k='i'/为明文添加必要的无关字符以防止同一组的两个字符相同for( k=0;k<strlen(ch2);k+=2) if(ch2k=ch2k+1)for(int t=strlen(ch2);t>k;t-)ch2t+
6、1=ch2t;ch2k+1=ch4; /若明文有奇数个字符,则添加一个无关字符以凑够偶数个if(strlen(ch2)%2!=0) ch2strlen(ch2)+1=ch2strlen(ch2);/字符串结尾赋'0'ch2strlen(ch2)=ch4;/明文串尾插入无关字符cout<<"经过处理后的明文为:"for(k=0;k<strlen(ch2);k+=2)cout<<ch2k<<ch2k+1<<" "cout<<endl;cout<<"其最终长
7、度为:"<<strlen(ch2)<<endl;for(k=0;k<strlen(ch2);k+=2) /明文输入并整理完毕int m1,m2,n1,n2;for(m1=0;m1<=4;m1+)for(n1=0;n1<=4;n1+)if(ch2k=chm1n1)break;if(ch2k=chm1n1)break;for(m2=0;m2<=4;m2+)for(n2=0;n2<=4;n2+)if(ch2k+1=chm2n2)break;if(ch2k+1=chm2n2)break;m1=m1%5;m2=m2%5;if(n1>4
8、)n1=n1%5;m1=m1+1;if(n2>4)n2=n2%5;m2=m2+1;if(m1=m2)ch2k=chm1(n1+1)%5;ch2k+1=chm2(n2+1)%5;else if(n1=n2)ch2k=ch(m1+1)%5n1;ch2k+1=ch(m2+1)%5n2;elsech2k=chm1n2;ch2k+1=chm2n1;cout<<"加密后所得到的密文是:"for(k=0;k<strlen(ch2);k+=2)cout<<ch2k<<ch2k+1<<" "cout<<
9、;endl;else break;/解密算法void decrypt()const int n=100;char letters26="abcdefghiklmnopqrstuvwxyz"/用于填充矩阵int flag25=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 ch55;/5x5矩阵char ch1n;/密钥char ch2n;/密文int len='a'-'a'int flg=1;cout<<"输入
10、密钥(a-z):"<<endl;cin>>ch1;while(flg=1)for(int i=0;i<strlen(ch1);i+)/把所输入的密钥转化为大写字母if(ch1i>'z'|ch1i<'a')cout<<"请重新选择操作:"<<endl; flg=0;break;elsech1i=ch1i-len; if(flg=1)for(i=0;i<strlen(ch1);i+)/把密钥中的j都变为iif(ch1i='j')ch1i='i
11、'i=0;int j=0;/把密钥中的字母填入到矩阵中,并把该字母标记为已用for(int k=0;k<strlen(ch1);k+) for( int t=0;t<25;t+)if(ch1k=letterst&&flagt=0)chij=letterst;flagt=1;if(j<4)j+;else i+;j=0;for( k=0;k<25;k+)/按字母表顺序把未用字母依次填入到矩阵中if(flagk=0)chij=lettersk;flagk=1;if(j<4)j+;elsei+;j=0;cout<<"密钥填充后
12、的矩阵为: "<<endl;for(i=0;i<5;i+)for(j=0;j<5;j+)cout<<chij;cout<<" "if(j=4) cout<<endl;cout<<endl;int f=0; /矩阵生成完毕/docout<<"请输入密文(大写英文字符a-z):"cin>>ch2;for(int k=0;k<strlen(ch2);k+)/把所输入的密文转化为大写字母if(ch2k>='a')ch2k=ch2k
13、-len;for( k=0;k<strlen(ch2);k+)/把密文中的j都变为iif(ch2k='j')ch2k='i'for( k=0;k<strlen(ch2);k+=2)if(ch2k=ch2k+1)cout<<"同一分组中不能出现相同字符!请重新输入。"<<endl;f=1;break;else f=2;if(f=1)continue;if(strlen(ch2)%2!=0)cout<<"字符串不能为奇数个!请重新输入。"<<endl;f=1;else
14、 f=2;while(f=1); /解密开始for( k=0;k<strlen(ch2);k+=2)int m1,m2,n1,n2;for(m1=0;m1<=4;m1+)for(n1=0;n1<=4;n1+)if(ch2k=chm1n1)break;if(ch2k=chm1n1)break;for(m2=0;m2<=4;m2+)for(n2=0;n2<=4;n2+)if(ch2k+1=chm2n2)break;if(ch2k+1=chm2n2)break;m1=m1%5;m2=m2%5;if(n1>4)n1=n1%5;m1=m1+1;if(n2>4)n
15、2=n2%5;m2=m2+1;if(m1=m2)ch2k=chm1(n1+4)%5;ch2k+1=chm2(n2+4)%5;else if(n1=n2)ch2k=ch(m1+4)%5n1;ch2k+1=ch(m2+4)%5n2;elsech2k=chm1n2;ch2k+1=chm2n1;cout<<"解密后所得到的明文是:"for(k=0;k<strlen(ch2);k+=2)cout<<ch2k<<ch2k+1;cout<<endl; else break;void main() cout<<"*算法说明*"<<endl;cout<<"*由于playfair算法过程是将明文两两分组,因此需要保证明文个数为偶数*"<<endl; cout<<"* 当输入明文个数为奇数,则解密后的明文会出现你输入的无关字符 *"<<endl; cout<<"* 当输入明文个数为偶数,则不会出现你输入的无关字符 *"<<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《2025欧元借款合同》
- 2025版权转让合同范文模板
- 2025《合同管理与招投标操作》课程标准
- 2025通信设备安装与维护合同
- 库房房屋租赁合同
- 联合举办成人高等教育合同
- 2025年昆明茶叶生产收购合同
- 地下车库车位转让买卖合同
- 饰品品牌加盟协议品牌推广
- 债务归夫妻一方婚内财产协议书范本
- 2025陕西核工业工程勘察院有限公司招聘(21人)笔试参考题库附带答案详解
- 2025年山东、湖北部分重点中学高中毕业班第二次模拟考试数学试题含解析
- 8.2 诚信经营 依法纳税课件-高中政治统编版选择性必修二法律与生活
- 2025年超高功率大吨位电弧炉项目发展计划
- DB32T 5076-2025 奶牛规模化养殖设施设备配置技术规范
- 2024年四川省高等职业教育单独考试招生文化素质考试中职英语试卷
- 人教A版必修第二册高一(下)数学6.3.2-6.3.3平面向量正交分解及坐标表示【课件】
- 高速公路修补合同协议
- 航空业劳动力安全保障措施
- 《环境规划与管理》课件[1]
- 租船问题PPT课件
评论
0/150
提交评论