《网络信息安全技术》实验报告破译vigenère密码加密的密文_第1页
《网络信息安全技术》实验报告破译vigenère密码加密的密文_第2页
《网络信息安全技术》实验报告破译vigenère密码加密的密文_第3页
《网络信息安全技术》实验报告破译vigenère密码加密的密文_第4页
《网络信息安全技术》实验报告破译vigenère密码加密的密文_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验报告1课程名称网络信息安全技术任课教师姓 名朱云初学 号院 系软件学院专 业软件工程一、 实验名称:实验一、破译vigenre 密码加密的密文二、 实验目的:熟悉vigenre 密码加密及解密方法三、实验内容及要求密钥长度316;明文为普通英文文章(仅含小写字母);实现vigenre 加密、解密;破译密文提交的报告:选择的密钥、明文、加密后的密文;破译密文的过程;分析使用、破译vigenre密码时应当考虑的所有因素。四、实验材料、工具、或软件普通计算机一台,并安装java applet、ie、dreamweavermx2004等软件五、实验步骤(或记录)1、选择的密钥、明文、加密后的密文密

2、钥为:computer明文为:my name is zhu yun beginning of the south china university of technology software engineering, zhaoqing, the students, the first phase of the new school curriculum is called network information security technology, classroom teacher is feng yuxiang.加密后的密文:om cufi kg obn pwb qyzmepwzv

3、hj vvq mhykj owcge wbukykwzvm dz xvevzdfhkp gaunpeig qcabrvgfuca, qjoafcgk, htt lxlfszim, kjs uckwk dtpmx fh fwy rvy erbhsc qgglbglniy cl tczxtx rvvkage mehcdbummfp etwnvzvm iyvleqzavs, tnoehlhsd hqpwaii we zxrx mgmctrx.2、破译过程按照vigenre 密码技术编写网页文件,代码以下: 维吉尼亚(vigenre)密码 body font-size:18px; font-famil

4、y:楷体_gb2312, 仿宋_gb2312; caption text-align:center; font-size:20px; font-weight:bold; center font-size:28px; font-weight:bold; .matrix border:#bbbbff solid thick; cursor:pointer; .matrix td width:18px; height:18px; border:#aaccaa 1px solid; text-align:center; .matrix th width:18px; height:18px; borde

5、r:#ddddff 1px solid; background-color:#eeeeff; text-align:center; .cal padding:20px 20px 20px 20px; .cal td,th border-width:0px; /-声明全局变量- var au=a.charcodeat(0);/大写a的编码 var al=a.charcodeat(0);/小写a的编码 var zu=z.charcodeat(0);/大写z的编码 var zl=z.charcodeat(0);/小写z的编码 var col1,col2;/方阵的列 /-方阵函数- function

6、writethead()/方阵表头部 document.writeln( ); for(var i=0;i26;i+) document.writeln(+string.fromcharcode(au+i)+); document.writeln(); function forto(i,j)/向前映射 return (i+j)%26; function backto(i,j)/向后映射 return (i+26-j)%26; function writetbody(fun,id)/方阵体,传入映射函数和表编号 /document.writeln(); for(var i=0;i=26;i+)

7、document.writeln(); /document.writeln(); document.writeln(); for(var i=0;i26;i+) document.writeln(); document.writeln(+string.fromcharcode(au+i)+); for(var j=0;j26;j+) document.writeln(+string.fromcharcode(au+fun(i,j)+); document.writeln(); document.writeln(); function initcols()/初始化列向量 col1=documen

8、t.getelementbyid(matrix1).getelementsbytagname(col); col2=document.getelementbyid(matrix2).getelementsbytagname(col); function pointin(j,cols)/鼠标处于j列时修改此列颜色 colsj+1.style.backgroundcolor=#ddddff; function pointout(j,cols)/鼠标移出j列时恢复此列颜色 colsj+1.style.backgroundcolor=; /-加密解密函数- function isupletter(c)

9、/判断是否为大写字符编码 if(c=au&c=al&c=zl)return true; else return false; function isletter(c)/判断是否为英文字符编码 return isupletter(c)|islowletter(c); function isletterstr(s)/判断是否为英文字符串 for(var i=0;is.length;i+) if(!isletter(s.charcodeat(i) return false; return true; function jiami()/加密函数 var key=document.form1.miyao

10、.value.tolowercase(); if(!isletterstr(key) alert(密钥必须为全英文字符串!); document.form1.miyao.focus(); return false; var express= document.form1.mingwen.value; var secret=; if(key.length=0)secret=express; else var a; var ee; for(var i=0;iexpress.length;i+) ee=express.charcodeat(i); if(isupletter(ee)a=au; els

11、e if(islowletter(ee)a=al; else secret+=express.charat(i); continue; secret+=string.fromcharcode(a+(ee-a)+(key.charcodeat(i%key.length)-al)%26); document.form1.miwen.value=secret; function jiemi()/解密函数 var key=document.form1.miyao.value.tolowercase(); if(!isletterstr(key) alert(密钥必须为全英文字符串!); documen

12、t.form1.miyao.focus(); return false; var secret= document.form1.miwen.value; var express=; if(key.length=0)express=secret; else var a; var se; for(var i=0;isecret.length;i+) se=secret.charcodeat(i); if(isupletter(se)a=au; else if(islowletter(se)a=al; else express+=secret.charat(i); continue; express

13、+=string.fromcharcode(a+(se-a)+26-(key.charcodeat(i%key.length)-al)%26); document.form1.mingwen.value=express; 网络信息安全技术课程破译vigenre密码加密的密文作业 密钥: 明文: onclick=jiami() / input type=button name=submit2 value= 密文: 加密方阵 密钥(行/列)+明文(列/行)=密文 writethead(); writetbody(forto,1); 解密方阵 密文(行)-密钥(列)=明文 writethead();

14、 writetbody(backto,2); 以上代码通过ie运行,显示界面如下图:2、破译过程要确定密钥,即确定k1 , k2 , k3 , k4 , k5 的值, 可以再一次使用指数重合法。的每个子串yi 是相应的明文xi 移动ki 个位置得到的,明文中a 、b 、. . . 、z 出现的概率.ki可能取值为0-25,逐一代入得出密钥:computer。通过加密方阵及解密方阵进行对比,在明文框或密文框内输入即可相互得到结果。如果破译更长的密码,在程序中修改相关的数据即可。明文输入可以是普通文章且带标点符号,程序可以过滤非法字符。六、实验存在问题和解决办法七、意见和建议八、教师评语(或成绩)

15、 教师签字: 年 月 日实验报告2课程名称网络信息安全技术任课教师冯玉翔姓 名朱云初学 号201020700974院 系软件学院专 业软件工程一、 实验名称:实验二、用c实现rsa 密码二、 实验目的:熟悉用c实现rsa 密码三、实验内容及要求用c 语言实现rsa 密码;产生随机素数p,q;选择公钥e,生成对应的私钥d;加密1mb 的数据(形式为00,01,ff,00,01,ff,);恢复上述加密得到的密文;反复执行10次,计算运行时间四、实验材料、工具、或软件普通计算机一台,并安装普通使用软件五、实验步骤(或记录)原理产生随机两素数p和q取n=p*q取t=(p-1)*(q-1)取任何一个数e

16、,要求满足et并且e与t互素(就是最大公因数为1)取d*e%t=1这样最终得到三个数: n d e设消息为数m (m n)设c=(m*d)%n就得到了加密后的消息c 设m=(c*e)%n则 m = m,从而完成对c的解密。注:*表示次方,上面两式中的d和e可以互换。在对称加密中:n d两个数构成公钥,可以告诉别人;n e两个数构成私钥,e自己保留,不让任何人知道。给别人发送的信息使用e加密,只要别人能用d解开就证明信息是由你发送的,构成了签名机制。别人给你发送信息时使用d加密,这样只有拥有e的你能够对其解密。rsa的安全性在于对于一个大数n,没有有效的方法能够将其分解从而在已知n d的情况下无

17、法获得e;同样在已知n e的情况下无法求得d。实践操作接下来做一个实践,看看实际的操作:找两个素数:p=47q=59这样n=p*q=2773t=(p-1)*(q-1)=2668取e=63,满足eperl -e foreach $i (1.9999) print($i),last if $i*63%2668=1 847即d847最终我们获得关键的n=2773d=847e=63取消息m=244我们看看加密:c=m*d%n = 244*847%2773用perl的大数计算来算一下:c:tempperl -mbigint -e print 244*847%2773465即用d对m加密后获得加密信息c4

18、65解密:我们可以用e来对加密后的c进行解密,还原m:m=c*e%n=465*63%2773 :c:tempperl -mbigint -e print 465*63%2773244即用e对c解密后获得m=244 , 该值和原始信息m相等。字符串加密把上面的过程集成一下我们就能实现一个对字符串加密解密的示例了。每次取字符串中的一个字符的ascii值作为m进行计算,其输出为加密后16进制的数的字符串形式,按3字节表示,如01f代码如下:#!/usr/bin/perl -w#rsa 计算过程学习程序编写的测试程序#watercloud 2003-8-12#use strict;use math:b

19、igint;my %rsa_core = (n=2773,e=63,d=847); #p=47,q=59my $n=new math:bigint($rsa_coren);my $e=new math:bigint($rsa_coree);my $d=new math:bigint($rsa_cored);print n=$n d=$d e=$en;sub rsa_encrypt my $r_mess = shift _; my ($c,$i,$m,$c,$cmess); for($i=0;$i new($c); $c=$m-copy(); $c-bmodpow($d,$n); $c=spri

20、ntf %03x,$c; $cmess.=$c; return $cmess;sub rsa_decrypt my $r_mess = shift _; my ($c,$i,$m,$c,$dmess); for($i=0;$i new($c); $c=$m-copy(); $c-bmodpow($e,$n); $c=chr($c); $dmess.=$c; return $dmess;my $mess=rsa 娃哈哈哈;$mess=$argv0 if argv = 1;print 原始串:,$mess,n;my $r_cmess = rsa_encrypt($mess);print 加密串:,

21、$r_cmess,n;my $r_dmess = rsa_decrypt($r_cmess);print 解密串:,$r_dmess,n;#eof测试一下:c:tempperl rsa-test.pln=2773 d=847 e=63原始串:rsa 娃哈哈哈加密串:5cb6cd6bc58a7709470aa74a0aa74a0aa74a6c70a46c70a46c70a4解密串:rsa 娃哈哈哈c:tempperl rsa-test.pl 安全焦点(xfocus)n=2773 d=847 e=63原始串:安全焦点(xfocus)加密串:3393ec12f0a466e0aa9510d025d7b

22、a0712dc3379f47d51c325d67b解密串:安全焦点(xfocus)评估前面已经提到,rsa的安全来源于n足够大,我们测试中使用的n是非常小的,根本不能保障安全性,我们可以通过rsakit、rsatool之类的工具获得足够大的n 及d e。通过工具,我们获得1024位的n及d e来测试一下:n=0x328c74784df31119c526d18098ebebb943b0032b599cee13cc2bce7b5fcd15f90b66ec3a85f5005dbdcded9bdfcb3c4c265af164ad55884d8278f791c7a6bfdad55edbc4f017f9c

23、cf1538d4c2013433b383b47d80ec74b51276ca05b5d6346b9ee5ad2d7be7abfb36e37108dd60438941d2ed173cca50e114705d7e2bc511951d=0x10001e=0xe760a3804acde1e8e3d7dc0197f9cef6282ef552e8cebbb7434b01cb19a9d87a3106dd28c523c29954c5d86b36e943080e4919ca8ce08718c3b0930867a98f635eb9ea9200b25906d91b80a47b77324e66aff2c4d70d8b

24、1c69c50a9d8b4b7a3c9ee05fff3a16afc023731d80634763da1dcabe9861a4789bd782a592d2b1965设原始信息m=0x11111111111122222222222233333333333用perl来运算:a) 用d对m进行加密如下:c=m*d%n :c:tempperl -mbigint -e $x=math:bigint-bmodpow(0x11111111111122222222222233333333333, 0x10001, 0x328c74784df31119c526d18098ebebb943b0032b599cee1

25、3cc2bce7b5fcd15f90b66ec3a85f5005dbdcded9bdfcb3c4c265af164ad55884d8278f791c7a6bfdad55edbc4f017f9ccf1538d4c2013433b383b47d80ec74b51276ca05b5d6346b9ee5ad2d7be7abfb36e37108dd60438941d2ed173cca50e114705d7e2bc511951);print $x-as_hex0x17b287be418c69ecd7c39227ab681ac422fcc84bb35d8a632543b304de288a8d4434b73d

26、2576bd45692b007f3a2f7c5f5aa1d99ef3866af26a8e876712ed1d4cc4b293e26bc0a1dc67e247715caa6b3028f9461a3b1533ec0cb476441465f10d8ad47452a12db0601c5e8beda686dd96d2acd59ea89b91f1834580c3f6d90898即用d对m加密后信息为:c=0x17b287be418c69ecd7c39227ab681ac422fcc84bb35d8a632543b304de288a8d4434b73d2576bd45692b007f3a2f7c5f5aa1

27、d99ef3866af26a8e876712ed1d4cc4b293e26bc0a1dc67e247715caa6b3028f9461a3b1533ec0cb476441465f10d8ad47452a12db0601c5e8beda686dd96d2acd59ea89b91f1834580c3f6d90898b) 用e对c进行解密如下:m=c*e%n :c:tempperl -mbigint -e $x=math:bigint-bmodpow(0x17b287be418c69ecd7c39227ab681ac422fcc84bb35d8a632543b304de288a8d4434b73d2

28、576bd45692b007f3a2f7c5f5aa1d99ef3866af26a8e876712ed1d4cc4b293e26bc0a1dc67e247715caa6b3028f9461a3b1533ec0cb476441465f10d8ad47452a12db0601c5e8beda686dd96d2acd59ea89b91f1834580c3f6d90898, 0xe760a3804acde1e8e3d7dc0197f9cef6282ef552e8cebbb7434b01cb19a9d87a3106dd28c523c29954c5d86b36e943080e4919ca8ce08718c

29、3b0930867a98f635eb9ea9200b25906d91b80a47b77324e66aff2c4d70d8b1c69c50a9d8b4b7a3c9ee05fff3a16afc023731d80634763da1dcabe9861a4789bd782a592d2b1965, 0x328c74784df31119c526d18098ebebb943b0032b599cee13cc2bce7b5fcd15f90b66ec3a85f5005dbdcded9bdfcb3c4c265af164ad55884d8278f791c7a6bfdad55edbc4f017f9ccf1538d4c20

30、13433b383b47d80ec74b51276ca05b5d6346b9ee5ad2d7be7abfb36e37108dd60438941d2ed173cca50e114705d7e2bc511951);print $x-as_hex0x11111111111122222222222233333333333(我的p4 1.6g的机器上计算了约5秒钟)得到用e解密后的m=0x11111111111122222222222233333333333 = mc) rsa通常的实现rsa简洁幽雅,但计算速度比较慢,通常加密中并不是直接使用rsa 来对所有的信息进行加密,最常见的情况是随机产生一个对称

31、加密的密钥,然后使用对称加密算法对信息加密,之后用rsa对刚才的加密密钥进行加密。 rsa算法实现java源代码:filename:rsa.java/* created on mar 3, 2005* todo to change the template for this generated file go to* window - preferences - java - code style - code templates*/import java.math.biginteger;import java.io.inputstream;import java.io.outputstrea

32、m;import java.io.fileinputstream;import java.io.fileoutputstream;import java.io.filenotfoundexception;import java.io.ioexception;import java.io.filewriter;import java.io.filereader;import java.io.bufferedreader;import java.util.stringtokenizer;/* author steve* todo to change the template for this ge

33、nerated type comment go to* window - preferences - java - code style - code templates*/public class rsa /* * biginteger.zero */ private static final biginteger zero = biginteger.zero; /* * biginteger.one */ private static final biginteger one = biginteger.one; /* * pseudo biginteger.two */ private s

34、tatic final biginteger two = new biginteger(2); private biginteger mykey; private biginteger mymod; private int blocksize; public rsa (biginteger key, biginteger n, int b) mykey = key; mymod = n; blocksize = b; public void encodefile (string filename) byte bytes = new byteblocksize / 8 + 1; byte tem

35、p; int templen; inputstream is = null; filewriter writer = null; try is = new fileinputstream(filename); writer = new filewriter(filename + .enc); catch (filenotfoundexception e1) system.out.println(file not found: + filename); catch (ioexception e1) system.out.println(file not found: + filename + .

36、enc); /* * write encoded message to filename.enc */ try while (templen = is.read(bytes, 1, blocksize / 8) 0) for (int i = templen + 1; i bytes.length; +i) bytesi = 0; writer.write(encodedecode(new biginteger(bytes) + ); catch (ioexception e1) system.out.println(error writing to file); /* * close input stream and file writer */ try is.close(); writer.close(); catch (ioexception e1) system.out.println(error closing file.); public void decodefile (string filename) filereader reader = null; outputstream os = null; try reader = new filereader(filename); os = new fileoutputs

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论