1、1、 替代加密法1) 编程实现课本习题2.1的线形替代加密方法的破解(提示:可使用穷举法);(已知替代变换函数f(a)=ak mod 26,且9k mod 26=15,试计算k)2) 破解后,实现该方法的加密运算(输入明文,输出密文)和解密运算(输入密文,输出明文)(解密运算提示:设密钥为k,密文为c,明文为m,则有m*k mod 26=c,因为m26且唯一,同样可使用穷举法搜索出m);3) 加密字符串“substitute”,输出密文;4) (可选) 推导解密密码本,即明文与密文字母的一一对应关系。2、 置换加密法1) 给定置换表“86427531”,编程实现基于该表的加密运算;2) 加密字
2、符串“transposition”,输出密文(提示:如字符串长度不是8的倍数,则需在字符串结尾后填充空格,使得其总长度为8的倍数);3) 参照课本表2-1和表2-8的关系,推导逆置换表,并编程实现相应的解密运算。三、程序清单1、 初始并定义程序所用的主要的参数 bool found = false; /标记k是否被求出bool ff = false; /标记密码本是否被求出static int CodeBook26; /替代加密法的明文本static char CodeBookStr26; /替代解密法的密码本int trsp8=7,5,3,1,6,4,2,0; /置换加密所用的数组int r
3、ev_trsp8=7,3,6,2,5,1,4,0; /置换解密所用的数组static char c26; /由明文转的密文string cc; /输入的密文int k;string aa; /输入的明文2、 替代加/解密算法1) 计算k void _mod_k()/求出K int i = 1; while (!found) if ( 9*i % 26 = 15 ) found = true; k = i; i+; cout k = kendl;2) 计算解密密码本 void _find_ma()/求出解密密码本 if (! coutendl not find k cout 小提示:;请先执行上
4、层的步骤1求出k return; ff = true; int i = 1; bool f = false; while (!f) if ( 15*i % 26 = 9 ) f = true; i+; int kd = i-1; /Des: x = y*kd mod 26k; 1/k = kd int t; 解密密码本为: char c; for (i=0; i26; i+) t = i*kd % 26; CodeBooki = t; c = i + 97;c=1 | aa.at(i)9) cout | cc.at(i)此解密法只能对字母进行解密! 明文为: ci = cc.at(i); in
5、t a = 0; if( m = a*k % 26 ) f = true; a+; a += 96; /97-1 ci = a;5) 替代密码本解密算法 void _ben(int len)/密码本解密ff) not find 密码本请先执行上层的步骤2求出密码本 int idx = cc.at(i) - 97;CodeBookStridx;3、 置换加/解密算法1) 置换加密算法 void _trans_a(string aa,int len)/置换加密 int l = 8 - len%8; string s = aa; while (l) s += l-; l = s.length()/8
6、; string s1, s2; int j,k,n; for(j=0; jl; j+) s1 = s.substr(j*8,8); s2 = for(k=0; k8; k+) n = trspk; s2 += s1.substr(n,1);s2;2) 置换解密算法 void _trans_j(int len)/置换解密 if (len%8)请输入长度为8的倍数的字符串解密 return; string s = cc; int j,k,n,l=len/8; n = rev_trspk;4、 程序处理流程四、运行结果1、计算k2、计算替代解密密码本3、加密4、解密基于iptables的Linux防火墙1、熟悉和掌握TCP/IP协议的基础概念和方法;2、掌握防火墙的概念、功能分类
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1