网络安全实验一.docx
- 文档编号:27540378
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:18
- 大小:105.16KB
网络安全实验一.docx
《网络安全实验一.docx》由会员分享,可在线阅读,更多相关《网络安全实验一.docx(18页珍藏版)》请在冰豆网上搜索。
网络安全实验一
网络安全课程实验报告书
实验1:
对称加密算法
专业
网络工程
班级
14-2
学号
14034460220
姓名
林浩强
指导教师
李家兰
完成时间
2016.11.29
成绩
一、实验目的
1、熟悉和掌握对称加密算法的原理及其一般过程;
2、掌握对称加密算法的基本方法:
替代(substitute)与置换(transposition);
3、掌握使用一定的编码开发工具,建议使用VC。
二、实验内容
1、替代加密法
1)编程实现课本习题2.1的线形替代加密方法的破解(提示:
可使用穷举法);
(已知替代变换函数f(a)=akmod26,且9kmod26=15,试计算k)
2)破解后,实现该方法的加密运算(输入明文,输出密文)和解密运算(输入密文,输出明文)(解密运算提示:
设密钥为k,密文为c,明文为m,则有m*kmod26=c,因为m<26且唯一,同样可使用穷举法搜索出m);
3)加密字符串“substitute”,输出密文;
4)加密字符串:
同学本人姓名拼音,输出密文;
5)推导解密密码本,即明文与密文字母的一一对应关系。
6)(可选)实现多种输入方式(键盘、文件、windows窗体文本框)的加密和解密。
2、置换加密法
1)给定置换表“86427531”,编程实现基于该表的加密运算;
2)加密字符串“transposition”,输出密文(提示:
如字符串长度不是8的倍数,则需在字符串结尾后填充空格,使得其总长度为8的倍数);
3)参照课本表2-1和表2-8的关系,推导逆置换表,并编程实现相应的解密运算。
三、程序清单
流程分析:
控制台输出穷举法对线形替代加密方法的破解并输出k——
1、加密;
2、用解密密钥解密;
3、用密码本解密;
4、用穷举法解密;
5、用输入输出流从en_in.txt中的字符串加密到en_out.txt;
6、用输入输出流从de_in.txt中的字符串解密到de_out.txt中;
——退出。
源码展现:
importjava.util.Scanner;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.FileReader;
importjava.io.FileWriter;
publicclasssubs{
privatestaticchar[]str_ins;
privatestaticchar[]str_outs;
privatestaticchar[]codebook=newchar[26];
privatestaticintk=0;
privatestaticintde_k=0;
privatestaticStringstr_in;
publicstaticvoidmain(String[]args){
subsss=newsubs();
Scannersc=newScanner(System.in);
System.out.println("0:
Thekof\"9kmod26=15\"is"+ss.ComputeK());
System.out.println("Thekfordecrytiomof\"9kmod26=15\"is"+ss.ComputeDe_k());
make_codebook();
System.out.println("Menu:
");
System.out.println("----------------------");
System.out.println("1:
encryption");
System.out.println("2:
decryptionwithdecryptkey");
System.out.println("3:
decryptionwithcodebook");
System.out.println("4:
decryptionwithbruteforce");
System.out.println("-----------------------");
System.out.println("5:
encryptfromen_in.txttoen_out.txt");
System.out.println("6:
decryptfromde_in.txttode_out.txt");
System.out.println("-----------------------");
System.out.println("7:
quit.");
System.out
.println("Pleasepressyourchoicewithoptionsinmenuabove:
");
intchoiceNum=sc.nextInt();
switch(choiceNum){
case1:
Scannersc1=newScanner(System.in);
System.out
.println("Inputastringcomposedoflowerenglishcharactersforencrypt:
");
str_in=sc1.nextLine();
str_ins=str_in.toCharArray();
str_process_encaps(str_ins,choiceNum);
break;
case2:
Scannersc2=newScanner(System.in);
System.out
.println("InputastringcomposedoflowerenglishcharactersforDEcrypt:
");
str_in=sc2.nextLine();
str_ins=str_in.toCharArray();
str_process_encaps(str_ins,choiceNum);
break;
case3:
Scannersc3=newScanner(System.in);
System.out
.println("InputastringcomposedoflowerenglishcharactersforDEcrypt:
");
str_in=sc3.nextLine();
str_ins=str_in.toCharArray();
str_process_encaps(str_ins,choiceNum);
break;
case4:
Scannersc4=newScanner(System.in);
System.out
.println("InputastringcomposedoflowerenglishcharactersforDEcrypt:
");
str_in=sc4.nextLine();
str_ins=str_in.toCharArray();
str_process_encaps(str_ins,choiceNum);
break;
case5:
//str_in="lhqlhq";
try{
//封装数据源
BufferedReaderbr=newBufferedReader(newFileReader(
"en_in.txt"));
//封装目的地
BufferedWriterbw=newBufferedWriter(newFileWriter(
"en_out.txt"));
//读写数据
Stringline=null;
while((line=br.readLine())!
=null){
str_ins=line.toCharArray();
str_process_encaps(str_ins,5);
for(inti=0;i } bw.write(str_outs); } //释放资源 bw.close(); br.close(); }catch(Exceptione1){ //TODOAuto-generatedcatchblock e1.printStackTrace(); } case6: //str_in="lhqlhq"; try{ //封装数据源 BufferedReaderbr=newBufferedReader(newFileReader( "de_in.txt")); //封装目的地 BufferedWriterbw=newBufferedWriter(newFileWriter( "de_out.txt")); //读写数据 Stringline=null; while((line=br.readLine())! =null){ bw.write(line); bw.newLine(); bw.flush(); str_ins=line.toCharArray(); str_process_encaps(str_ins,2); for(inti=0;i System.out.print(str_outs[i]); } bw.write(str_outs); } //释放资源 bw.close(); br.close(); }catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } } /*-----计算替代函数中的K值---------*/ publicintComputeK(){ for(inti=0;i<26;i++){ if(9*i%26==15) k=i; } returnk; } /*-----计算基于逆函数的解密de_k值---------*/ publicintComputeDe_k(){ for(inti=0;i<26;i++){ if(15*i%26==9) de_k=i; } returnde_k; } publicstaticvoidstr_process_encaps(char[]str_ins,intchoice){ switch(choice){ case1: intlen=str_ins.length; chartemp; str_outs=newchar[len]; for(inti=0;i temp=encry(str_ins[i]); str_outs[i]=temp; } System.out.println("明文是: "); System.out.println(str_in); System.out.println("密文是: "); for(inti=0;i System.out.print(str_outs[i]); } break; case2: intlen2=str_ins.length; chartemp2; str_outs=newchar[len2]; for(inti=0;i temp2=decry_de_k(str_ins[i]); str_outs[i]=temp2; } System.out.println("密文是: "); System.out.println(str_in); System.out.println("明文是: "); for(inti=0;i System.out.print(str_outs[i]); } break; case3: intlen3=str_ins.length; chartemp3; str_outs=newchar[len3]; for(inti=0;i temp3=decry_codebook(str_ins[i]); str_outs[i]=temp3; } System.out.println("明文是: "); System.out.println(str_in); System.out.println("密文是: "); for(inti=0;i System.out.print(str_outs[i]); } break; case4: intlen4=str_ins.length; chartemp4; str_outs=newchar[len4]; for(inti=0;i temp4=decry_force(str_ins[i]); str_outs[i]=temp4; } System.out.println("密文是: "); System.out.println(str_in); System.out.println("明文是: "); for(inti=0;i System.out.print(str_outs[i]); } break; case5: intlen5=str_ins.length; chartemp5; str_outs=newchar[len5]; for(inti=0;i temp5=encry(str_ins[i]); str_outs[i]=temp5; } System.out.println("密文保存在en_out.txt里: "); break; } } publicstaticchardecry_de_k(chars){ return(char)((s-'a')*de_k%26+'a'); } publicstaticchardecry_codebook(chars){ return(char)(codebook[s-'a']+'a'); } publicstaticcharencry(chars){ return(char)((s-'a')*k%26+'a'); } publicstaticvoidmake_codebook(){ intt,i; for(i=0;i<26;i++){ t=i*k%26;//加密i=t codebook[t]=(char)i;//解密t=i } } publicstaticchardecry_force(chars){ intt,n=0; for(t=0;t<26;t++){ if(t*k%26==(s-'a')){ n=t+'a'; } } return(char)n; } } 2、置换加密法 数据结构: HashMap publicStringencrypte(Stringstr1);//加密的方法 publicStringdecipher(Stringstr1);//解密的方法 程序处理流程: 求置换关系——加密——解密 (1)求出置换关系并存放在哈希表中: publicvoidfuntion(){ Stringstr="86427531";//置换表 for(intn=0;n charc=str.trim().charAt(n);//拿到置换表的每一位 Strings=c+""; inti=Integer.parseInt(s);//转换为int类型 trans.put(n+1,i);//放入哈希表(键: 密文下标;值: 明文下标) } } (2)最短长度(8位)的明文的加密方法: publicStringencrypte(Stringstr1){//加密的方法 Stringstr=""; Strings_c=""; Stringarray_str[]=newString[8];//明文数组 for(intn=0;n<8;n++){ charc=str1.charAt(n);//得到明文的每一位 s_c=c+"";//转换为string类型 array_str[n]=s_c;//放入明文数组中 }//这个for循环之后就把明文完全放入数组中了 /** *找出第n+1位(map的键是从1开始的)的明文对应的密文序号get(n+1)-1;这个序号就是在数组中的下标 *-1的原因是: 在数组中,下标是从0开始的 */ Tabtab=newTab(); tab.funtion(); for(intn=0;n str=str+array_str[tab.trans.get(n+1)-1]+""; } returnstr; } (3)最短长度(8位)的密文的解密方法: publicStringdecipher(Stringstr1){//解密的方法 Stringstr=""; Stringarray_str[]={"","","","","","","",""};//密文数组,初始值都为空 Stringcipher="86427531"; for(intn=0;n<8;n++){ Stringc=str1.charAt(n)+"";//得到明文的每一位 intposition=Integer.parseInt(cipher.charAt(n)+"")-1;//当前遍历到的这个明文在密文数组中的位置 array_str[position]=c+"";//将明文放入密文数组中 }//这个for循环之后就把明文完全放入密文数组中了 for(inti=0;i<8;i++){ str+=array_str[i];//将密文一个个输出来拼接成字符串str } returnstr; } (4)加密过程: 对明文长度进行处理,确保长度为8的倍数,然后分段进行加密,每一段都调用最短明文的加密方法 if(e.getActionCommand().equals("加密")){ Stringstr="";//存放明文: 已经加够长度(8的倍数) intlength=txt_lowercase.getText().length();//未改变的明文长度 while(length%8! =0){//加入原始明文不是8的倍数,则加空格凑够 txt_lowercase.setText(txt_lowercase.getText()+""); length=txt_lowercase.getText().length();//加空格后的明文长度 } str=txt_lowercase.getText();//加空格后的明文 Stringstrall="";//存放密文字符串 inth=str.length()/8;//得到明文长度为8的几倍,将明文截成几段8位的数组进行加密,然后再将每段的密文拼起来 for(intn=0;n Strings=""; s=str.substring(n*8,(n+1)*8);//每一段明文都是8位 strall+=encrypte(s);//调用处理的方法,将s作为参数 } l_Aciphertxt.setText(strall); frame.repaint(); System.out.println(strall); } (5)解密过程: 与加密相同 if(e.getActionCommand().equals("解密")){//解密和加密的过程相同,只是调用的方法不同 Stringstr=""; intlength=txt_mlowercase.getText().length(); while(length%8! =0){ txt_mlowercase.setTe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络安全 实验