密码学1.66
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
现代密码学实验报告 1 实验项目:Mathematica的使用与古典密码实验教师评语:
实验报告
一、实验目的与要求
目的:了解Mathematica中一些与密码学有关的运算。掌握用Mathematica 进行仿射密码加解密,了解多表密码加解密。
内容:用Mathematica求解模运算和模幂运算等。用Mathematica编程完成课本11页第1题、第2题和第3题的计算。
要求:课本11页第1题、第2题和第3题有Mathematica求解的程序和结果。
二、实验方案
1.求加密仿射变换,运行:
affine t["thenationalsecurityagency",11,23]
求解密仿射变化: a1=PowerMod[11-1, 26];b1 = Mod[-a1*23 26];
得a1=19;b1=5,
再运行:
affinecrypt["ywpkxyhvkxonptjchybxlpktb",a1,b1]
2.求出a,b:
输入命令:
解密过程:
输入命令:
输出:
输入命令:
输出:
输入命令:
3.加密过程:
运行:A={{3,13,21,9},{15,10,6,25},{10,17,4,8},{1,23,7,2}};
B={1,21,8,17};
m="pleasesendmethebookmycreditcardnoissixonetwoonethreeeightsixz eroonesixeightfourninesevenzerotwol";
s=StringLength[m];
t=Length[B];
m1=Table[StringTake[m,{i}],{i,1,s}];
m2=txt2num0[m1];
m3=Table[{m2[[t*i-3]],m2[[t*i-2]],m2[[t*i-1]],m2[[t*i]]},{i,1,s/ t}];
m4=Transpose[m3];
B1=Transpose[Table[B,{i,1,s/t}]];
c1=A.m4+B1;
c2=Transpose[c1];
c3=Table[c2[[Floor[i/t]+1,Mod[i,t]+1]],{i,0,s-1}];
c4=Mod[c3,26];
c5=Table[alph0[c4[[i]]],{i,1,s}];
c=StringJoin[c5]
解密过程:
运行:
A={{3,13,21,9},{15,10,6,25},{10,17,4,8},{1,23,7,2}};
B={1,21,8,17};
c="nqxbbtwbdcjjijdtxdcfyfsglygdmoxnllgnhapcqzzqzcrgzezjuiebrrsgn emvqdjemxnaierpxakmyrbytqfmnemvjbom";
s=StringLength[c];
t=Length[B];
c1=Table[StringTake[c,{i}],{i,1,s}];
c2=txt2num0[c1];
c3=Table[{c2[[t*i-3]],c2[[t*i-2]],c2[[t*i-1]],c2[[t*i]]},{i,1,s/ t}];
c4=Transpose[c3];
B1=Transpose[Table[B,{i,1,s/t}]];
A1=Mod[PowerMod[Det[A],-1,26]*Det[A]*Inverse[A],26];
m1=A.(c4-B1);
m2=Transpose[m1];
m3=Table[m2[[Floor[i/t]+1,Mod[i,t]+1]],{i,0,s-1}];
m4=Mod[m3,26];
m5=Table[alph0[m4[[i]]],{i,1,s}];
m=StringJoin[m5]
三、实验结果和数据处理
1.加密结果为:
“ywpkxyhvkxonptjchybxlpktb”。
解密结果为:
"thenationalsecurityagency"。
2.求出a、b结果为:
明文为:
3.加密结果为:xbbtwbdcjjijdtxdcfyfsglygdmoxnllgnhapcqzzqzcrgzezjuiebrrsgnemvqdjemxnaierpx akmyrbytqfmnemvjbom
解密结果为:"pleasesendmethebookmycreditcardnoissixonetwoonethreeeightsixzeroonesi xeightfourninesevenzerotwol"
四、结论
用软件计算比人工手算要容易得多也要快得多,但是运行过程中也会出现许多细节上的问题要注意!程序运算也是比较容易出错的,所以要非常地细
心方能避免问题的发生!
五、问题与讨论
1.运行过程中发现运行出错。
当发现运行出错的时候首先应该先检查自己所输入的程序有没有出错,为了能更好更快的发现问题,应该一行一行地输入检查,当发现自己无法解决的问题时候应该及时请求老师协助帮忙解决问题!
2.本次实验中主要会出现哪些细节上的问题?
本次试验中第三题是比较容易出错,因为程序比较多,输入的时候可能会出错!所以要特别细心!还要注意的是整除问题,若不能整除应该及时补位,若不补位,则无法运算出最后结果,第三题需补一位方能整除!