信息安全 实验一 古典密码算法C语言
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息安全实验报告
课程名称: _ 专业:计算机科学与技术 _2010_级_02班
实验编号:实验项目_ 指导教师_ _
姓名:闫斌学号: 2010012854 实验成绩:___
实验一古典密码算法
实验名称:古典密码算法
实验类型: 设计性实验
学时:4
适用对象: 信息安全
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
#include
#include
#define N 500
int main()
{
/*--------------------------------*/
int i=0,k,m,n,l;
char str1[N],str2[N]; /*C=M+K...K is key...*/
clrscr();
/*--------------------------------*/
printf("This is a code password program......\n");
printf("Please input proclaimed in writing(M)::\n");
gets(str1);/*输入要加密的明文M*/
printf("Please input the key(K)(int)::\n");
scanf("%d",&k);/*输入密钥K*/
m=strlen(str1);/*测试明文的长度*/
printf("The M length is %d\n",m);
printf("\n *\n *\n *\n***\n *\n");
printf("ciphertext(C) is ::\n\n");
for(i=0;i { n=(int)str1[i];/*将字符转换成ASCII*/ if(str1[i]==' ')/*如果字符串中出现空格返回空格*/ { printf(" "); str2[i]=str1[i]; } else if(n>96&&n<123)/*对小写进行加密*/ { n=(n-97+k)%26; if(n<0) n=26+n; l=(char)(n+97); printf("%c",l); str2[i]=l; } else if(n>64&&n<91)/*对大写进行加密*/ { n=(n-65+k)%26; if(n<0) n=26+n; l=(char)(n+97); printf("%c",l); str2[i]=l; } } str2[i]='\0'; /*--------------------------------*/ printf("\n\nThe C length is %d",strlen(str2)); printf("\n\n *\n *\n *\n***\n *\n"); printf("When the ciphertext is '%s',\nThe password program is...::\n\n",str2); m=strlen(str2); for(i=0;i { n=(int)str2[i];/*将字符转换成ASCII*/ if(str2[i]==' ')/*如果是空格,返回的也是空格*/ { printf(" "); } else if(n>96&&n<123)/*对小写进行解密*/ { n=(n-97-k)%26; if(n<0) n=26+n; l=(char)(n+97); printf("%c",l); } else if(n>64&&n<91)/*对大写进行解密*/ { n=(n-65-k)%26; if(n<0) n=26+n; l=(char)(n+97); printf("%c",l); } } str1[i]='\0'; getch(); return 0; } 4.1.4 运行结果