当前位置:文档之家› 实验报告_密码学

实验报告_密码学

信息安全实验报告学号:学生姓名:班级:实验三密码学实验一、古典密码算法实验一、实验目的通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。

二、编译环境运行 windows 或 linux 操作系统的 PC 机,具有 gcc(linux)、VC (windows)等 C语言编译环境。

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

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

下面介绍两种常见的具有代表性的古典密码算法,以帮助读者对密码算法建立一个初步的印象。

1.替代密码替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文。

例如:明文字母 a、b、c、d ,用 D、E、F、G做对应替换后形成密文。

替代密码包括多种类型,如单表替代密码、多明码替代密码、多字母替代密码、多表替代密码等。

下面我们介绍一种典型的单表替代密码,恺撒(caesar)密码,又叫循环移位密码。

它的加密方法,就是将明文中的每个字母用此字符在字母表中后面第 k个字母替代。

它的加密过程可以表示为下面的函数:E(m)=(m+k) mod n其中:m 为明文字母在字母表中的位置数;n 为字母表中的字母个数;k 为密钥;E(m)为密文字母在字母表中对应的位置数。

例如,对于明文字母 H,其在字母表中的位置数为 8,设 k=4,则按照上式计算出来的密文为 L:E(8) = (m+k) mod n = (8+4) mod 26 = 12 = L2.置换密码置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改变,从而实现明文信息的加密。

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

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

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

例如,明文为 attack begins at five,密钥为 cipher,将明文按照每行 6 列的形式排在矩阵中,形成如下形式:a t t a c kb e g i n sa t f i v e根据密钥 cipher中各字母在字母表中出现的先后顺序,给定一个置换:1 2 3 4 5 6f =1 4 5 32 6根据上面的置换,将原有矩阵中的字母按照第 1 列,第 4 列,第 5 列,第 3 列,第 2列,第 6 列的顺序排列,则有下面形式:a a c t t kb i n g e sa I v f t e从而得到密文:abatgftetcnvaiikse其解密的过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由密钥给出的矩阵置换产生新的矩阵,从而恢复明文。

四、实验内容和步骤1、根据实验原理部分对替代密码算法的介绍,自己创建明文信息,并选择一个密钥 k,编写替代密码算法的实现程序,实现加密和解密操作。

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

五、总结与思考记录程序调试过程中出现的问题,分析其原因并找出解决方法。

记录最终实现的程序执行结果。

思考采取什么样的手段来防范类似对网络的攻击。

六、实验结果替换密码的加密解密先是加密实现程序为:#include ""#include ""main(){int k,i=0;char a[100],b[100]={0};;printf("please input your ming wen:\n");gets(a);printf("please input mi shi \n");scanf("%d",&k);printf("\n");do{b[i]=(char)(a[i]+k);if(b[i]>122){b[i]=(char)(b[i]-26);}i++;}while(a[i]!='\0');puts(b);getch();}实验结果为:再是解密:实现程序为:#include ""#include ""main(){int k,i=0;char a[100],b[100];printf("please input mi wen: \n"); gets(a);printf("please input mi shi: \n"); scanf("%d",&k);printf("\n");do{b[i]=(char)(a[i]-k);if(b[i]<97){b[i]=(char)(b[i]+26);不知道三哪里的问题结果中的Y输不出来}i++;}while(a[i]!='\0');puts(b);getch();}结果为:置换密码先是加密实现程序#include<>#define TRUE 1#define FALSE 0#define N 1000#define M 50int Glength(char *a){char *pt;int nlen=0;pt=a;while((*pt)!='\0'){nlen++;pt++;}return nlen;}void encrypt(char *a,int n,int *b) {int i,j,k,t,x,y;char c[M][M],d[M][M];k=Glength(a);puts(a);t=k%n;if(t==0){x=k/n;}else{x=(k/n)+1;}printf("%d\n",x);for(i=0;i<x;i++){for(j=0;j<n;j++){if(((a[i*n+j])>96)&&(a[i*n+j]<123)) {c[i][j]=a[i*n+j];printf("%c",c[i][j]);}else{c[i][j]=' ';printf("%c",c[i][j]);}}}printf("\n hehe\n");for(j=0;j<n;j++){for(i=0;i<x;i++){y=b[j];printf("encrypt %d\t",y);d[i][y]=c[i][j];printf("--%c\t",d[i][y]);}}printf("\n");for(i=0;i<x;i++){for(j=0;j<n;j++){a[i*n+j]=d[i][j];}}a[x*n+j+1]='\0';puts(a);}void bubble_sort(char *a,int n,int *b){int i,j,nTemp,k,x;char change;char c[N];x=0;strcpy(c,a);for(i=n-1,change=TRUE;i>=1&&change;--i) {change=FALSE;for(j=0;j<i;++j){if(a[j]>a[j+1]){nTemp=a[j];a[j]=a[j+1];a[j+1]=nTemp;change=TRUE;}}}i=0;while((c[i])!='\0'){for(k=0;k<n;k++){if((c[i])==a[k]){b[x]=k;printf("%d\t",b[x]); }}i++;x++;}printf("\n");puts(a);}int main(){int k;char nArr[N],a[N];int b[N];clrscr();printf("Please input key:\n");gets(nArr);k=Glength(nArr);printf("Please input M word:\n"); gets(a);printf("The data items in ascending order:\n"); bubble_sort(&nArr,k,&b);puts(nArr);encrypt(&a,k,&b);puts(a);printf("\n");return 0;}加密结果为:二、公钥加密算法—RSA一、实验目的通过使用 RSA 算法对实验数据进行加密和解密,掌握公钥加密算法的基本原理,熟练掌握 RSA 算法各功能模块的工作原理和具体运算过程。

二、实验原理RSA 公钥加密算法是 1977 年由 Ron Rivest、Adi Shamirh 和 LenAdleman 在(美国麻省理工学院)开发的。

RSA 取名来自开发他们三者的名字。

RSA 是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被 ISO 推荐为公钥数据加密标准。

RSA 算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

1. RSA 的密钥生成RSA 的算法涉及三个参数,n、e、d。

其中,n 是两个大质数 p、q 的积,n 的二进制表示时所占用的位数,就是所谓的密钥长度。

鉴于现代对于大整数分解的水平不断增强,一般 P、Q 的取值都要求在 1024位以上。

e 和 d 是一对相关的值,e 可以任意取,但要求 e 与(p-1)*(q-1)互质;再选择 d,要求:(e*d)mod((p-1)*(q-1))=1。

<n,e>、<n,d>就是密钥对。

一般将前者当作公钥,后者作为私钥使用。

2. RSA 加密/解密过程RSA 加解密和解密的算法完全相同,设 A 为明文,B 为密文,则:A=B^e mod n;B=A^d mod n;e 和 d 可以互换使用,即:A=B^d mod n;B=A^e mod n;三、实验环境运行 Windows 或 Linux 操作系统的 PC 机,具有 gcc(Linux)、VC(Windows)等 C 语言编译环境。

相关主题