置换密码.docx

上传人:b****6 文档编号:16071904 上传时间:2023-07-10 格式:DOCX 页数:11 大小:37.34KB
下载 相关 举报
置换密码.docx_第1页
第1页 / 共11页
置换密码.docx_第2页
第2页 / 共11页
置换密码.docx_第3页
第3页 / 共11页
置换密码.docx_第4页
第4页 / 共11页
置换密码.docx_第5页
第5页 / 共11页
置换密码.docx_第6页
第6页 / 共11页
置换密码.docx_第7页
第7页 / 共11页
置换密码.docx_第8页
第8页 / 共11页
置换密码.docx_第9页
第9页 / 共11页
置换密码.docx_第10页
第10页 / 共11页
置换密码.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

置换密码.docx

《置换密码.docx》由会员分享,可在线阅读,更多相关《置换密码.docx(11页珍藏版)》请在冰点文库上搜索。

置换密码.docx

置换密码

实验3置换密码

一、实验目的

学习常见的古典密码学算法,通过编程实现置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。

二、实验原理

古典密码算法曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。

它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。

下面介绍另一种常见的具有代表性的古典密码算法----置换密码。

置换密码算法的原理是不改变明文字符,而是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密。

置换密码有时又称为换位密码。

矩阵换位法是实现置换密码的一种常用方法。

它将明文中的字母按照给定的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中的字母,从而形成密文。

例如,明文为attackbeginsatfive,密钥为cipher,将明文按照每行6个字母的形式排在矩阵中,形成如下形式:

根据密钥cipher中各个字母在字母表中出现的先后顺序,给定一个置换:

根据上面的置换,将原有居住中的字母按照第1列、第4列、第5列、第3列、第2列、第6列的顺序排列,则有下面的形式:

从而得到密文:

abatgftetcnvaiikse

其解密过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由密钥给出的矩阵置换产生新的矩阵,从而恢复明文。

三、实验所需仪器、设备

运行Windows操作系统的PC机,具VC++(Windows)等C语言编译环境。

四、实验内容和要求

1.根据实验原理部分对置换密码算法的介绍,自己创建明文信息,并选择一个密钥,编写置换密码算法的实现程序,实现加密和解密操作。

2.要求上述密码算法最后的实现程序提供加密和解密两个接口:

intencrypt()和intdecrypt(),当加密或者解密成功时返回CRYPT_OK,失败时返回CRYPT_ERROR。

五.实验报告要求

要求提供算法实现程序和实验测试结果(用截图)。

加密源程序

importjava.util.Scanner;

publicclassReplace_encryption{

Stringstr_1="attackbeginsatfive";//明文字符串

Stringstr_2="cipher";//密钥

intlen_2=str_2.length();//密钥长度

intlen_1=str_1.length();//明文的长度

intlen_3=len_1/len_2;

intcount=0;

int[]in=newint[len_2];

char[]ch;

char[][]ch_1=newchar[len_3][len_2];

char[][]ch_2=newchar[len_3][len_2];

publicchar[][]Replace(){

for(inti=0;i

str_1.getChars(count,count+len_2,ch_1[i],0);

count=count+len_2;

}

System.out.println("明文:

");

for(inti=0;i

for(intj=0;j

System.out.print(ch_1[i][j]+"");

}

}

System.out.println();

for(inti=0;i

for(intj=1;j<=6;j++){

switch(j){

case1:

{

ch_2[i][0]=ch_1[i][0];

break;

}//1

case2:

{

ch_2[i][1]=ch_1[i][3];

break;

}//4

case3:

{

ch_2[i][2]=ch_1[i][4];

break;

}//5

case4:

{

ch_2[i][3]=ch_1[i][2];

break;

}//3

case5:

{

ch_2[i][4]=ch_1[i][1];

break;

}//2

case6:

{

ch_2[i][5]=ch_1[i][5];

break;

}//6

}

}

}

returnch_2;

}

publicvoidShow(char[][]ch_3){

in[0]=1;

in[1]=4;

in[2]=5;

in[3]=3;

in[4]=2;

in[5]=6;

System.out.println("密文:

");

for(inti=0;i<6;i++){

for(intj=1;j<=6;j++){

if(j==in[i]){

for(intl=0;l<3;l++){

System.out.print(ch_3[l][in[i]-1]+"");

}

}

}

}

}

}

解密源程序

publicclassReplace_decryption{

Stringstr_1="abatgftetcnvaiikse";//密文字符串

Stringstr_2="cipher";//密钥

intlen_2=str_2.length();//密钥长度6

intlen_1=str_1.length();//明文的长度

intlen_3=len_1/len_2;

intcount=0;

int[]in=newint[len_2];

char[]ch;

char[][]ch_1=newchar[len_2][len_3];

char[][]ch_2=newchar[len_2][len_3];

char[][]ch_3=newchar[len_2][len_3];

publicchar[][]Replace(){

for(inti=0;i

str_1.getChars(count,count+len_3,ch_1[i],0);

count=count+len_3;

}

System.out.println("密文:

");

for(inti=0;i

for(intj=0;j

System.out.print(ch_1[i][j]+"");

}

}

System.out.println();

for(inti=0;i

for(intj=1;j<=6;j++){

switch(j){

case1:

{

ch_2[0][i]=ch_1[0][i];

break;

}//1

case2:

{

ch_2[3][i]=ch_1[1][i];

break;

}//4

case3:

{

ch_2[4][i]=ch_1[2][i];

break;

}//5

case4:

{

ch_2[2][i]=ch_1[3][i];

break;

}//3

case5:

{

ch_2[1][i]=ch_1[4][i];

break;

}//2

case6:

{

ch_2[5][i]=ch_1[5][i];

break;

}//6

}

}

}

//for(inti=0;i

//for(intj=0;j

//System.out.print(ch_2[i][j]+"");

//}

//}

returnch_2;

}

publicchar[][]Exchange(char[][]ch){

for(inti=0;i

for(intj=1;j<=6;j++){

switch(j){

case1:

{

ch_3[0][i]=ch_2[0][i];

break;

}//1

case2:

{

ch_3[3][i]=ch_2[1][i];

break;

}//4

case3:

{

ch_3[4][i]=ch_2[2][i];

break;

}//5

case4:

{

ch_3[2][i]=ch_2[3][i];

break;

}//3

case5:

{

ch_3[1][i]=ch_2[4][i];

break;

}//2

case6:

{

ch_3[5][i]=ch_1[5][i];

break;

}//6

}

}

}

//for(inti=0;i

//for(intj=0;j

//System.out.print(ch_3[i][j]+"");

//}

//}

returnch_3;

}

publicvoidShow(char[][]ch_3){

System.out.println("明文:

");

for(inti=0;i

for(intj=0;j

System.out.print(ch_3[j][i]+"");

}

}

}

}

测试源程序

publicclassTest{

publicstaticvoidmain(String[]args){

char[][]ch1;

char[][]ch2;

char[][]ch3;

System.out.println("*****************加密*****************");

Replace_encryptionre=newReplace_encryption();

ch1=re.Replace();

re.Show(ch1);

System.out.println();

System.out.println("*****************解密*****************");

Replace_decryptionrd=newReplace_decryption();

ch2=rd.Replace();

ch3=rd.Exchange(ch2);

rd.Show(ch3);

}

}

如有侵权请联系告知删除,感谢你们的配合!

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2