文档详情

密码学实验报告_1.doc

发布:2018-08-18约8.9千字共13页下载文档
文本预览下载声明
哈尔滨工程大学 实 验 报 告 实 验 名 称: 古典密码 班 级: 学 号: 姓 名: 实 验 时 间: 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); //
显示全部
相似文档