多表古典密码的乘法加密运算

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

多表古典密码的乘法加密运算

实验目的:

1. 熟练掌握多表古典密码简单乘法加密算法原理及实现;

2. 掌握多表古典密码简单乘法加密算法的应用;

实验内容:

1、写出多表(双表)古典密码的乘法加密运算的算法、程序设计;

2、输入模q(根据明文确定)及加密密钥k1,k2对下列明文进行加法加密:

A graph is finite if both its vertex set and edge set are finite. In this book

we study only finite graphs, and so the term ‘graph’ always means ‘finite graph’.

(注:标点符号及空格也算一个符号,忽略大小)

3、求出相对应于上述q和k的解密密钥。

实验结果:

1.(1)写出多表古典密码简单乘法加密算法如下:

Step1:确定k和q的值;

Step2:输入相应的密文;

Step3:作变换c=(mi*ki) mod q,字母用ASCII码变为数字后计算;

Step4:得到相对应的明文;

Step5:逐一输出明文;

程序如下:

#include

#include

#include

main()

{

char M[200];

char C[200];

int K[200],q=26,i,j;

srand( (unsigned)time( NULL ) );

for(j=0;j<=200;j++)

{

K[j]=rand()%50;

}

printf("please input chars:\n"); gets(M);

for(i=0;M[i]!='\0';i++)

{

if(M[i]>='a'&&M[i]<='z')

{

C[i]=((M[i]-'a'+1)*K[i])%q+'a';

}

else if(M[i]>='A'&&M[i]<='Z') {

C[i]=((M[i]-'A'+1)*K[i])%q+'A'; }

else

C[i]=M[i];

}

C[i]='\0';

printf("The result is:\n%s\n",C);

getch();

}

2.进行乘法加密后的结果为:

3.解密密钥为:m[i]=k[i]d*c[i] mod q

总结与分析:

程序设计过程中,运用C++环境运行时需要注意程序的综合运用,不同的运行环境下,需对程序做相应的改变。通过本次试验,进一步了解了多表古典密码简单乘法加密算法原理及实现;掌握了多表古典密码简单乘法加密算法的应用;

附件:

Ch4 多表(双表)古典密码的乘法加密运算的程序设计文件

注:实验结束,将所有材料打包(文件采用统一格式:sn1-学号,以后的实验资料采用类似的文件格式)压缩并发送到:hzsx2004@

相关文档
最新文档