实验:置换密码[优选材料].doc

上传人:rrsccc 文档编号:10271127 上传时间:2021-05-04 格式:DOC 页数:13 大小:74KB
返回 下载 相关 举报
实验:置换密码[优选材料].doc_第1页
第1页 / 共13页
实验:置换密码[优选材料].doc_第2页
第2页 / 共13页
实验:置换密码[优选材料].doc_第3页
第3页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《实验:置换密码[优选材料].doc》由会员分享,可在线阅读,更多相关《实验:置换密码[优选材料].doc(13页珍藏版)》请在三一文库上搜索。

1、实验3 置换密码一、实验目的学习常见的古典密码学算法,通过编程实现置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。二、实验原理古典密码算法曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。下面介绍另一种常见的具有代表性的古典密码算法-置换密码。置换密码算法的原理是不改变明文字符,而是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密。置换密码有时又称为换位密码。矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给定的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩

2、阵中的字母,从而形成密文。例如,明文为attack begins at five,密钥为cipher,将明文按照每行6个字母的形式排在矩阵中,形成如下形式:根据密钥cipher中各个字母在字母表中出现的先后顺序,给定一个置换:根据上面的置换,将原有居住中的字母按照第列、第列、第列、第列、第列、第列的顺序排列,则有下面的形式:从而得到密文:其解密过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由密钥给出的矩阵置换产生新的矩阵,从而恢复明文。三、实验所需仪器、设备运行Windows操作系统的PC机,具VC+(Windows)等C语言编译环境。四、实验内容和要求 1 根据实验原理部

3、分对置换密码算法的介绍,自己创建明文信息,并选择一个密钥, 编写置换密码算法的实现程序,实现加密和解密操作。2要求上述密码算法最后的实现程序提供加密和解密两个接口:int encrypt ( )和 int decrypt ( ),当加密或者解密成功时返回 CRYPT_OK,失败时返回 CRYPT_ERROR。五实验报告要求要求提供算法实现程序和实验测试结果(用截图)。加密源程序import java.util.Scanner;public class Replace_encryption String str_1= attackbeginsatfive;/明文字符串 String str_2=

4、cipher;/密钥 int len_2=str_2.length(); /密钥长度int len_1=str_1.length(); /明文的长度int len_3=len_1/len_2;int count=0;int in=new intlen_2;char ch;char ch_1=new charlen_3len_2;char ch_2=new charlen_3len_2;public char Replace() for(int i=0;ilen_3;i+)/字符串转换为字符数组 str_1. getChars(count,count+len_2,ch_1i,0); count=

5、count+len_2; System.out.println(明文:); for(int i=0;ilen_3;i+)for(int j=0;jlen_2;j+) System.out.print(ch_1ij+ ); System.out.println();for(int i=0;ilen_3;i+)/ 置换 for(int j=1;j=6;j+) switch(j) case 1: ch_2i0 = ch_1i0; break;/1 case 2: ch_2i1 = ch_1i3; break; /4 case 3: ch_2i2 = ch_1i4; break; /5 case 4:

6、 ch_2i3 = ch_1i2; break; /3 case 5: ch_2i4 = ch_1i1; break; /2 case 6: ch_2i5 = ch_1i5; break; /6 return ch_2; public void Show(char ch_3) in0=1; in1=4; in2=5; in3=3; in4=2; in5=6; System.out.println( 密文:); for(int i=0;i6;i+) for(int j=1;j=6;j+) if(j=ini) for(int l=0;l3;l+) System.out.print(ch_3lini

7、-1+ ); 解密源程序public class Replace_decryption String str_1= abatgftetcnvaiikse;/密文字符串 String str_2=cipher;/密钥 int len_2=str_2.length(); /密钥长度6int len_1=str_1.length(); /明文的长度int len_3=len_1/len_2;int count=0;int in=new intlen_2;char ch;char ch_1=new charlen_2len_3;char ch_2=new charlen_2len_3;char ch_

8、3=new charlen_2len_3;public char Replace() for(int i=0;ilen_2;i+)/字符串转换为字符数组 str_1. getChars(count,count+len_3,ch_1i,0); count=count+len_3; System.out.println(密文:); for(int i=0;ilen_2;i+)for(int j=0;jlen_3;j+) System.out.print(ch_1ij+ ); System.out.println();for(int i=0;ilen_3;i+)/ 置换 for(int j=1;j=

9、6;j+) switch(j) case 1: ch_20i = ch_10i; break;/1 case 2: ch_23i = ch_11i; break; /4 case 3: ch_24i = ch_12i; break; /5 case 4: ch_22i = ch_13i; break; /3 case 5: ch_21i = ch_14i; break; /2 case 6: ch_25i = ch_15i; break; /6 /for(int i=0;ilen_2;i+)/for(int j=0;jlen_3;j+)/ System.out.print(ch_2ij+ );

10、/ return ch_2; public char Exchange(char ch) for(int i=0;ilen_3;i+)/ 置换 for(int j=1;j=6;j+) switch(j) case 1: ch_30i = ch_20i; break; /1 case 2: ch_33i = ch_21i; break; /4 case 3: ch_34i = ch_22i; break; /5 case 4: ch_32i = ch_23i; break; /3 case 5: ch_31i = ch_24i; break; /2 case 6: ch_35i = ch_15i

11、; break; /6 / for(int i=0;ilen_2;i+)/for(int j=0;jlen_3;j+)/ System.out.print(ch_3ij+ );/ return ch_3; public void Show(char ch_3) System.out.println( 明文:); for(int i=0;ilen_3;i+) for(int j=0;jlen_2;j+) System.out.print(ch_3ji+ ); 测试源程序public class Test public static void main(String args) char ch1;char ch2;char ch3; System.out.println(*加密*);Replace_encryption re=new Replace_encryption(); ch1=re.Replace(); re.Show(ch1); System.out.println(); System.out.println(*解密*); Replace_decryption rd=new Replace_decryption(); ch2=rd.Replace(); ch3=rd.Exchange(ch2); rd.Show(ch3);13xuan1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1