欢迎来到天天文库
浏览记录
ID:39380403
大小:46.00 KB
页数:11页
时间:2019-07-02
《多表代换密码playfair的实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一.问题描述:著名的多表古典加密体制使Playfair,它将明文中的双字母组合作为一个单元对待,并将这些单元转换为密文双字母组合。Playfair算法基于使用一个5×5字母矩阵,该矩阵使用一个关键词构造。这里有一个例子,是由LordPeterWimsey在DorothySayer的书《HaveHisCarcase》中解答的。MONARCHYBDEFGI/JKLPQSTUVWXZ在这里,该关键词是monarchy。该矩阵该矩阵是这样构造的;从左至右、从上至下填入该关键词的字母(去除重复字母),然后再以字母表顺序将余下的字母填入矩阵剩余空间。字母I和J被算作一个字母。Playfair
2、根据下列规则一次对明文的两个字母加密:(1)、属于相同对中的重复的明文字母将用一个填充字母进行分隔,因此,词balloon将被加密为balxloon。(2)、属于该矩阵相同行的明文字母将由其右边的字母替代,而行的最后一个字母由行的第一个字母代替。例如,ar被加密为RM。(3)、属于相同列的明文字母将由它下面的字母代替,而列的最后一个字母由列的第一个字母代替。例如,mu被加密为CM。(4)、否则,明文的其他字母将由与其同行,且与下一个同列的字母代替。因此,hs成为BP,ea成为IM(或JM,这可根据加密者的意愿而定)。基本要求:二.基本要求:根据多表代换密码的特点,编写playfa
3、ir软件,并以monarchy密钥进行测试,验证加密结果。三.实验代码:#include#includeusingnamespacestd;voiddecrypt();//解密函数voidencrypt();//加密函数voidmain(){cout<<"____________________________________________"<4、5、"<6、多表代换密码Playfair的实现7、"<8、欢迎使用本程序9、"<10、___________11、_________________________________12、"<13、选择你所需要的操作:14、"<15、1.为字符串加密16、"<17、2.为字符串解密18、"<19、3.结束程序20、"<21、___________________________22、"<>n;if(n<123、24、n>3)cout<<"无25、该项操作,请重来:"<26、加密结束27、"<28、_________________________________________29、"<30、解密结束31、"<32、________________33、_________________________34、"<35、程序结束,谢谢您的使用!^_^36、"<37、_________________________________________38、"<39、26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵intflag[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数组对应-11-charch[5][5];//5X5矩阵charch1[N];//密钥charch2[N];//明文charch4;//无关字符intlen='a'-'A';cout<<"输入密钥:";cin>>ch1;intflg=1
4、
5、"<6、多表代换密码Playfair的实现7、"<8、欢迎使用本程序9、"<10、___________11、_________________________________12、"<13、选择你所需要的操作:14、"<15、1.为字符串加密16、"<17、2.为字符串解密18、"<19、3.结束程序20、"<21、___________________________22、"<>n;if(n<123、24、n>3)cout<<"无25、该项操作,请重来:"<26、加密结束27、"<28、_________________________________________29、"<30、解密结束31、"<32、________________33、_________________________34、"<35、程序结束,谢谢您的使用!^_^36、"<37、_________________________________________38、"<39、26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵intflag[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数组对应-11-charch[5][5];//5X5矩阵charch1[N];//密钥charch2[N];//明文charch4;//无关字符intlen='a'-'A';cout<<"输入密钥:";cin>>ch1;intflg=1
6、多表代换密码Playfair的实现
7、"<8、欢迎使用本程序9、"<10、___________11、_________________________________12、"<13、选择你所需要的操作:14、"<15、1.为字符串加密16、"<17、2.为字符串解密18、"<19、3.结束程序20、"<21、___________________________22、"<>n;if(n<123、24、n>3)cout<<"无25、该项操作,请重来:"<26、加密结束27、"<28、_________________________________________29、"<30、解密结束31、"<32、________________33、_________________________34、"<35、程序结束,谢谢您的使用!^_^36、"<37、_________________________________________38、"<39、26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵intflag[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数组对应-11-charch[5][5];//5X5矩阵charch1[N];//密钥charch2[N];//明文charch4;//无关字符intlen='a'-'A';cout<<"输入密钥:";cin>>ch1;intflg=1
8、欢迎使用本程序
9、"<10、___________11、_________________________________12、"<13、选择你所需要的操作:14、"<15、1.为字符串加密16、"<17、2.为字符串解密18、"<19、3.结束程序20、"<21、___________________________22、"<>n;if(n<123、24、n>3)cout<<"无25、该项操作,请重来:"<26、加密结束27、"<28、_________________________________________29、"<30、解密结束31、"<32、________________33、_________________________34、"<35、程序结束,谢谢您的使用!^_^36、"<37、_________________________________________38、"<39、26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵intflag[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数组对应-11-charch[5][5];//5X5矩阵charch1[N];//密钥charch2[N];//明文charch4;//无关字符intlen='a'-'A';cout<<"输入密钥:";cin>>ch1;intflg=1
10、___________
11、_________________________________
12、"<13、选择你所需要的操作:14、"<15、1.为字符串加密16、"<17、2.为字符串解密18、"<19、3.结束程序20、"<21、___________________________22、"<>n;if(n<123、24、n>3)cout<<"无25、该项操作,请重来:"<26、加密结束27、"<28、_________________________________________29、"<30、解密结束31、"<32、________________33、_________________________34、"<35、程序结束,谢谢您的使用!^_^36、"<37、_________________________________________38、"<39、26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵intflag[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数组对应-11-charch[5][5];//5X5矩阵charch1[N];//密钥charch2[N];//明文charch4;//无关字符intlen='a'-'A';cout<<"输入密钥:";cin>>ch1;intflg=1
13、选择你所需要的操作:
14、"<15、1.为字符串加密16、"<17、2.为字符串解密18、"<19、3.结束程序20、"<21、___________________________22、"<>n;if(n<123、24、n>3)cout<<"无25、该项操作,请重来:"<26、加密结束27、"<28、_________________________________________29、"<30、解密结束31、"<32、________________33、_________________________34、"<35、程序结束,谢谢您的使用!^_^36、"<37、_________________________________________38、"<39、26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵intflag[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数组对应-11-charch[5][5];//5X5矩阵charch1[N];//密钥charch2[N];//明文charch4;//无关字符intlen='a'-'A';cout<<"输入密钥:";cin>>ch1;intflg=1
15、1.为字符串加密
16、"<17、2.为字符串解密18、"<19、3.结束程序20、"<21、___________________________22、"<>n;if(n<123、24、n>3)cout<<"无25、该项操作,请重来:"<26、加密结束27、"<28、_________________________________________29、"<30、解密结束31、"<32、________________33、_________________________34、"<35、程序结束,谢谢您的使用!^_^36、"<37、_________________________________________38、"<39、26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵intflag[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数组对应-11-charch[5][5];//5X5矩阵charch1[N];//密钥charch2[N];//明文charch4;//无关字符intlen='a'-'A';cout<<"输入密钥:";cin>>ch1;intflg=1
17、2.为字符串解密
18、"<19、3.结束程序20、"<21、___________________________22、"<>n;if(n<123、24、n>3)cout<<"无25、该项操作,请重来:"<26、加密结束27、"<28、_________________________________________29、"<30、解密结束31、"<32、________________33、_________________________34、"<35、程序结束,谢谢您的使用!^_^36、"<37、_________________________________________38、"<39、26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵intflag[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数组对应-11-charch[5][5];//5X5矩阵charch1[N];//密钥charch2[N];//明文charch4;//无关字符intlen='a'-'A';cout<<"输入密钥:";cin>>ch1;intflg=1
19、3.结束程序
20、"<21、___________________________22、"<>n;if(n<123、24、n>3)cout<<"无25、该项操作,请重来:"<26、加密结束27、"<28、_________________________________________29、"<30、解密结束31、"<32、________________33、_________________________34、"<35、程序结束,谢谢您的使用!^_^36、"<37、_________________________________________38、"<39、26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵intflag[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数组对应-11-charch[5][5];//5X5矩阵charch1[N];//密钥charch2[N];//明文charch4;//无关字符intlen='a'-'A';cout<<"输入密钥:";cin>>ch1;intflg=1
21、___________________________
22、"<>n;if(n<1
23、
24、n>3)cout<<"无
25、该项操作,请重来:"<26、加密结束27、"<28、_________________________________________29、"<30、解密结束31、"<32、________________33、_________________________34、"<35、程序结束,谢谢您的使用!^_^36、"<37、_________________________________________38、"<39、26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵intflag[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数组对应-11-charch[5][5];//5X5矩阵charch1[N];//密钥charch2[N];//明文charch4;//无关字符intlen='a'-'A';cout<<"输入密钥:";cin>>ch1;intflg=1
26、加密结束
27、"<28、_________________________________________29、"<30、解密结束31、"<32、________________33、_________________________34、"<35、程序结束,谢谢您的使用!^_^36、"<37、_________________________________________38、"<39、26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵intflag[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数组对应-11-charch[5][5];//5X5矩阵charch1[N];//密钥charch2[N];//明文charch4;//无关字符intlen='a'-'A';cout<<"输入密钥:";cin>>ch1;intflg=1
28、_________________________________________
29、"<30、解密结束31、"<32、________________33、_________________________34、"<35、程序结束,谢谢您的使用!^_^36、"<37、_________________________________________38、"<39、26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵intflag[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数组对应-11-charch[5][5];//5X5矩阵charch1[N];//密钥charch2[N];//明文charch4;//无关字符intlen='a'-'A';cout<<"输入密钥:";cin>>ch1;intflg=1
30、解密结束
31、"<32、________________33、_________________________34、"<35、程序结束,谢谢您的使用!^_^36、"<37、_________________________________________38、"<39、26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵intflag[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数组对应-11-charch[5][5];//5X5矩阵charch1[N];//密钥charch2[N];//明文charch4;//无关字符intlen='a'-'A';cout<<"输入密钥:";cin>>ch1;intflg=1
32、________________
33、_________________________
34、"<35、程序结束,谢谢您的使用!^_^36、"<37、_________________________________________38、"<39、26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵intflag[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数组对应-11-charch[5][5];//5X5矩阵charch1[N];//密钥charch2[N];//明文charch4;//无关字符intlen='a'-'A';cout<<"输入密钥:";cin>>ch1;intflg=1
35、程序结束,谢谢您的使用!^_^
36、"<37、_________________________________________38、"<39、26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵intflag[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数组对应-11-charch[5][5];//5X5矩阵charch1[N];//密钥charch2[N];//明文charch4;//无关字符intlen='a'-'A';cout<<"输入密钥:";cin>>ch1;intflg=1
37、_________________________________________
38、"<39、26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵intflag[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数组对应-11-charch[5][5];//5X5矩阵charch1[N];//密钥charch2[N];//明文charch4;//无关字符intlen='a'-'A';cout<<"输入密钥:";cin>>ch1;intflg=1
39、26]="ABCDEFGHIKLMNOPQRSTUVWXYZ";//用于填充矩阵intflag[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数组对应-11-charch[5][5];//5X5矩阵charch1[N];//密钥charch2[N];//明文charch4;//无关字符intlen='a'-'A';cout<<"输入密钥:";cin>>ch1;intflg=1
此文档下载收益归作者所有