置换密码参考模板_第1页
置换密码参考模板_第2页
置换密码参考模板_第3页
置换密码参考模板_第4页
置换密码参考模板_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

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

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

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

4、字符串 String str_2="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;i<len_3;i+)/字符串转换为字符数组 str_1. getChars(co

5、unt,count+len_2,ch_1i,0); count=count+len_2; System.out.println("明文:"); for(int i=0;i<len_3;i+)for(int j=0;j<len_2;j+) System.out.print(ch_1ij+" "); System.out.println();for(int i=0;i<len_3;i+)/ 置换 for(int j=1;j<=6;j+) switch(j) case 1: ch_2i0 = ch_1i0; break;/1 case

6、2: ch_2i1 = ch_1i3; break; /4 case 3: ch_2i2 = ch_1i4; break; /5 case 4: 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

7、=0;i<6;i+) for(int j=1;j<=6;j+) if(j=ini) for(int l=0;l<3;l+) System.out.print(ch_3lini-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(); /明文的

8、长度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_3=new charlen_2len_3;public char Replace() for(int i=0;i<len_2;i+)/字符串转换为字符数组 str_1. getChars(count,count+len_3,ch_1i,0); count=count+len_3; System.out.println("密

9、文:"); for(int i=0;i<len_2;i+)for(int j=0;j<len_3;j+) System.out.print(ch_1ij+" "); System.out.println();for(int i=0;i<len_3;i+)/ 置换 for(int j=1;j<=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

10、: 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;i<len_2;i+)/for(int j=0;j<len_3;j+)/ System.out.print(ch_2ij+" ");/ return ch_2; public char Exchange(char ch) for(int i=0;i<len_3;i+)/ 置换 for(int j=1;j<=6;j+) switch

11、(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; break; /6 / for(int i=0;i<len_2;i+)/for(int j=0;j<len_3;j+)/ System.out.print(ch_3ij+"

12、; ");/ return ch_3; public void Show(char ch_3) System.out.println( "明文:"); for(int i=0;i<len_3;i+) for(int j=0;j<len_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(); c

温馨提示

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

评论

0/150

提交评论