欢迎来到天天文库
浏览记录
ID:24932289
大小:55.50 KB
页数:4页
时间:2018-11-17
《仿射密码实验报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实验报告姓名:1111学号:22222班级:2222日期:2013211古典密码(仿射密码)一、实验环境1.硬件配置:处理器:Corei5M450@2.40GHZ,内存2GB,主硬盘320G2.使用软件:(1)操作系统:win7(2)软件工具:MicrosoftVisualC++6.0二、实验设计的相关概念或基本原理1.仿射密码的基本思想:加法密码和乘法密码结合就构成仿射密码,仿射密码的加密和解密算法是: C=Ek(m)=(k1m+k2)modn M=Dk(c)=k1(c-k2)modn o仿射密码具有可逆性的条件是gcd(k,n
2、)=1。当k1=1时,仿射密码变为加法密码,当k2=0时,仿射密码变为乘法密码。 o仿射密码中的密钥空间的大小为nφ(n),当n为26字母,φ(n)=12,因此仿射密码的密钥空间为12×26=312。三、实验内容根据实验原理的介绍,创建一个明文信息,再确定k1,k2,编写实现程序,实现加密和解密操作。实验流程图:四、实验总结分析关键代码:1.辗转相除法求y,z的最大公因数:intgcd(inty,intz){intk=0;do{k=y%z;y=z;z=k;}while(k!=0);returny;}2.求a相对于b的逆intNi(in
3、ta,intb){inti=0;while(a*(++i)%b!=1);returni;}1.加密算法if(a[i]>96&&a[i]<123)b[i]=(k1*(a[i]-97)+k2)%26+65;elseif(a[i]>64&&a[i]<91)b[i]=(k1*(a[i]-65)+k2)%26+65;2.解密算法if(b[i]>64&&b[i]<91)tmp=Ni(k1,26)*((b[i]-65)-k2);if(tmp<0)a[i]=tmp%26+26+97;elsea[i]=tmp%26+97;结果显示:5.小结仿射密码的加
4、密较一般的古典密码更难以破解一些,因为它的密钥空间相对较大。在研究加密思想的过程中,我编程遇到的主要难题是如何求逆元的过程。我在不断查询各种资料,复习了线性代数的相关知识以后,决定将几种求法都上机调试了一遍,并参考了前人编写的各种代码实现方法,最终选定了其中一种我认为简单易行的方法。由于我设置了要求输入明文或者密文时以“#”号结尾,故当我尝试着故意忘记输入结尾符号时,发现程序出现不可预知的错误,会跳出乱码。由此我体会到,一个好的开发软件必须从用户的角度,考虑各种用户可能输入的各种情况,进行报错或者修正,这样才具有可靠性。
此文档下载收益归作者所有