您好,欢迎访问三七文档
实验一古典密码算法一、实验目的通过编程实现替代密码算法和置换密码算法,加深对古典密码体系的了解,为以后深入学习密码学奠定基础。二、实验原理1、替代密码替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其他字符替代后形成密文。例如,明文字母a、b、c、d,用D、E、F、G做对应替换后形成密文。最早的替代密码是由JuliusCaesar发明的Caesar(恺撒)密码,又叫循环移位密码。它的加密过程可以表示为下面的函数:E(m)=(m+k)modn其中,m为明文字母在字母表中的位置数;n为字母表中的字母个数;k为密钥;E(m)为密文字母在字母表中对应的位置数。2、置换密码置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改变,从而实现明文信息的加密。置换密码又称为换位密码。矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给定的顺序安排在一个矩阵中,然后又根据密钥提供的顺序重新组合矩阵中的字母,从而形成密文。三、程序流程图替代密码:置换密码:四、程序结果截图开始输入明文输入偏移量秘钥每一位明文+偏移量全部完成?结束否是开始输入明文输入列交换秘钥列交换结束按行顺序输出五、实验代码替代密码:#includestdio.h#includemath.h#includestring.h#defineN200intmain(){inti=0,y,a,b,l;charstr1[N],str2[N];printf(明文:);gets(str1);printf(偏移量秘钥:);scanf(%d,&y);a=strlen(str1);printf(密文:);for(i=0;ia;i++){b=str1[i];if(str1[i]==''){printf();str2[i]=str1[i];}elseif(b96&&b123){b=(b-97+y)%26;if(b0)b=b+26;l=(b+97);printf(%c,l);str2[i]=l;}}str2[i]='\0';printf(\n);a=strlen(str2);for(i=0;ia;i++){b=str2[i];if(str2[i]==''){printf();}elseif(b96&&b123){b=(b-97-y)%26;if(b0)b=b+26;l=(b+97);}}printf(\n);return0;}置换密码:#includestdio.h#includemath.h#includestring.h#defineN100intmain(){inti,j,LK,LM,m,n,temp;intT[N];charK[N],M[N],C[N],Temp1[N],Temp2[N],Temp3[N];printf(明文:\n);gets(M);printf(秘钥:\n);gets(K);LK=strlen(K);LM=strlen(M);m=LM/LK;n=LK;for(i=0;iLK;i++){temp=0;for(j=0;jLK;j++){if(K[i]K[j]){temp+=1;}}T[i]=LK-temp;printf(%d,T[i]);}for(i=0;im;i++){for(j=0;jn;j++){Temp1[i*LK+j]=M[i*LK+j];}printf(\n);}Temp1[LM]='\0';for(i=0;iLK;i++){for(j=0;jm;j++){Temp2[j*LK+i]=Temp1[j*LK+T[i]-1];}}Temp2[LM]='\0';printf(\n);for(i=0;iLK;i++){for(j=0;jm;j++){Temp3[j*LK+i]=Temp2[j*LK+T[i]-1];}}Temp3[LM]='\0';printf(\n);printf(密文:\n);for(j=0;jLK;j++){for(i=0;im;i++){printf(%c,Temp3[i*LK+j]);}}printf(\n);return0;}
本文标题:实验1
链接地址:https://www.777doc.com/doc-4786768 .html