信息安全 实验一 古典密码算法C语言Word文件下载.doc
《信息安全 实验一 古典密码算法C语言Word文件下载.doc》由会员分享,可在线阅读,更多相关《信息安全 实验一 古典密码算法C语言Word文件下载.doc(8页珍藏版)》请在冰豆网上搜索。
1.实验原理
古典密码算法历史上曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。
它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。
下面介绍两种常见的具有代表性的古典密码算法,以帮助读者对密码算法建立一个初步的印象。
2.实验目的
通过变成实现替代密码算法和置换密码算法,加深对古典密码体质的了解,为深入学习密码学奠定基础。
3.实验环境
运行windows或linux操作系统的pc机,具有gcc(linux)、VC(Windows)等C语言编译环境。
4.实验内容
4.1替代密码算法
4.1.1
根据实验远离部分对替代密码算法的介绍,创建明文信息,并选择一个密钥k,编写替代密码算法的实现程序,实现加密和解密操作。
替代密码包括多种类型,如单表替代密码、多明码替代密码、多字母替代密码、多表替代密码等。
4.1.2
替代密码算法的远离是使用替代法进行加密,就是将明文的字符用其他字符替代后形成密文。
例如字母a、b、c、d,用D、E、F、G做对应替换后形成密文。
4.1.3代码
#include<
stdio.h>
math.h>
string.h>
#defineN500
intmain()
{
/*--------------------------------*/
inti=0,k,m,n,l;
charstr1[N],str2[N];
/*C=M+K...Kiskey...*/
clrscr();
printf("
Thisisacodepasswordprogram......\n"
);
Pleaseinputproclaimedinwriting(M):
:
\n"
gets(str1);
/*输入要加密的明文M*/
Pleaseinputthekey(K)(int):
scanf("
%d"
&
k);
/*输入密钥K*/
m=strlen(str1);
/*测试明文的长度*/
TheMlengthis%d\n"
m);
\n*\n*\n*\n***\n*\n"
ciphertext(C)is:
\n\n"
for(i=0;
i<
m;
i++)/*加密的过程*/
{
n=(int)str1[i];
/*将字符转换成ASCII*/
if(str1[i]=='
'
)/*如果字符串中出现空格返回空格*/
{
printf("
"
str2[i]=str1[i];
}
elseif(n>
96&
&
n<
123)/*对小写进行加密*/
n=(n-97+k)%26;
if(n<
0)
n=26+n;
l=(char)(n+97);
%c"
l);
str2[i]=l;
64&
91)/*对大写进行加密*/
n=(n-65+k)%26;
printf("
}
str2[i]='
\0'
;
\n\nTheClengthis%d"
strlen(str2));
\n\n*\n*\n*\n***\n*\n"
Whentheciphertextis'
%s'
\nThepasswordprogramis...:
str2);
m=strlen(str2);
i++)/*解密过程*/
n=(int)str2[i];
if(str2[i]=='
)/*如果是空格,返回的也是空格*/
printf("
123)/*对小写进行解密*/
n=(n-97-k)%26;
if(n<
91)/*对大写进行解密*/
n=(n-65-k)%26;
str1[i]='
getch();
return0;
}
4.1.4运行结果
4.2置换密码
4.2.1
根据实验原理部分对置换密码算法的介绍,自己创建明文信息,并选择一个密钥,编写置换密码算法的实现程序,实现加密和解密操作。
4.2.2
置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改变,从而实现明文信息的加密。
置换密码有时又称为换位密码。
矩阵换位法是实现置换密码的一种常用方法。
它将明文中的字母按照给的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中字母,从而形成密文。
4.2.3代码
#defineN100
/*----------------------------*/
inti,j,lenK,lenM,m,n,temp;
intT[N];
charK[N],M[N],C[N],Temp1[N],Temp2[N],Temp3[N];
Thisisasubstitutioncipher...\n"
PleaseinputtheM:
/*输入明文M*/
gets(M);
PleaseinputtheK:
gets(K);
lenK=strlen(K);
lenM=strlen(M);
/*测设长度*/
m=lenM/lenK;
/
n=lenK;
/*定义矩阵的长和宽*/
lenK;
i++)/*对密钥进行数字排序*/
temp=0;
for(j=0;
j<
j++)
if((int)K[i]<
(int)K[j])
{
temp+=1;
}
T[i]=lenK-temp;
printf("
%d"
T[i]);
/*输出各字符对应的数字顺序*/
\n\nFirst........\n\n"
i++)/*根据密钥将明文排列成矩阵*/
n;
Temp1[i*lenK+j]=M[i*lenK+j];
%c"
Temp1[i*lenK+j]);
Temp1[lenM]='
\nSecond........\n\n"
/*进行第一次置换*/
i++)
Temp2[j*lenK+i]=Temp1[j*lenK+T[i]-1];
Temp2[lenM]='
Temp2[i*lenK+j]);
/*-------------------------------*/
\nThird.......\n\n"
/*进行第二次置换*/
Temp3[j*lenK+i]=Temp2[j*lenK+T[i]-1];
Temp3[lenM]='
Temp3[i*lenK+j]);
/*-----------------------------*/
Thesubstitutioncipheris...\n"
/*输出结果*/
for(j=0;
for(i=0;
4.2.4运行结果
5.总结
通过此次实验,对古典密码算法有了进一步的了解,同时也在过程当中学习到了如何更好的完善一个问题的求解过程。
这次的实验还可以通过MATLAB来完成。
在置换密码的算法中,未能完成解密算法,但是我会继续完成的。