密码学实验报告_1.doc
文本预览下载声明
哈尔滨工程大学
实 验 报 告
实 验 名 称: 古典密码
班 级:
学 号:
姓 名:
实 验 时 间: 2015.6.15
成 绩:
指 导 教 师:
实验室名称:
哈尔滨工程大学实验室与资产管理处 制
一、实验名称
古典密码算法
二、实验目的
通过编程实现经典的代替密码算法和置换密码,包括移位密码、维吉尼亚密码、周期置换密码、列置换密码,加深对代替技术的了解,为现代分组密码实验奠定基础。
三、实验环境(实验所使用的器件、仪器设备名称及规格)
WindowXP系统计算机 ,Dev C++
四、实验任务及其要求
(1)根据实验原理部分对维吉尼亚密码的介绍,自己创建明文信息,并选择一个密钥,编写维吉尼亚密码的实现程序,实现加密和解密操作。
(2)根据实验原理部分对列置换密码的介绍,自己创建明文信息,并选择一个密钥,编写列置换密码的实现程序,实现加密和解密操作。
(3)根据实验原理部分对移位密码的介绍,自己创建明文信息,并选择一个密钥,编写移位密码的实现程序,实现加密和解密操作。
(4)根据实验原理部分对周期置换密码的介绍,自己创建明文信息,并选择一个密钥,编写周期置换密码的实现程序,实现加密和解密操作。
五、实验设计(包括原理图、真值表、分析及简化过程、卡诺图、源代码等)
1.维吉尼亚密码
#includestdio.h
#includestring.h
#includestdlib.h
#define MAX 100
void jiami(char m[],char c[],char key[]){
int i,k;
k=strlen(m);
for(i=0;ik;i++){
c[i]=(m[i]-a+key[i]-a)%26+a;
}
c[k]=\0;
puts(c);
}
void jiemi(char c[],char m[],char key[]){
int i,k;
k=strlen(c);
for(i=0;ik;i++){
m[i]=(c[i]-key[i]+26)%26+a;
}
c[k]=\0;
puts(m);
}
main(){
int i,j,k;
char m[MAX],c[MAX],key[MAX];
printf(请输入明文:);
gets(m);
printf(请输入密钥:);
gets(key);
i=strlen(m);
j=strlen(key);
for(k=j;ki;k++){
if(ij)
key[k]=key[k%j];
}
key[i]=\0;
puts(key);
system(PAUSE);
printf(加密后密文为:);
jiami(m,c,key);
printf(解密后明文为:);
jiemi(c,m,key);
system(PAUSE);
}
2.列置换密码
#includestdio.h
#includestdlib.h
#includestring.h
#define MAX 100
char M[MAX][MAX],C[MAX][MAX];
int main()
{
char m[MAX],c[MAX];
int key[MAX],b[MAX],i,j,k,p,q,r,s,t;
printf(加密请输入1,解密请输入2:);
scanf(%d,t);
if(t==1)
{
printf(请输入明文:);
//gets(m);
scanf(%s,m); //输入明文
p=strlen(m); //
显示全部