魏泽钦20175095密码学实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
密码学基础实验
一、实验教学目标与基本要求
密码学基础实验是本课程重要的实践教学环节。实验的目的不仅仅是验证理论知识,更重要的是通过实验加强学生的实验手段与实践技能,培养学生分析问题、解决问题、应用知识的能力和创新精神,全面提高学生的综合素质。
通过本实验简要了解密码学以及现代密码算法的基本知识,学会常用文件加密的实现、了解系统加密解密技术,具体掌握几种加解密方法。实验后完成要求撰写实验报告,报告内容包括题目、测试数据、运行结果、遇到的问题和解决方法、关键代码或程序清单,学生可以在实验报告中提出对实验的建议和意见。
二、实验项目及教学安排
三、实验成绩考核办法
实验成绩满分100分,按下面7条进行考核评定。
(1)做好实验内容的预习,写出预习报告;占10%。
(2)了解实验题目的调试方法;占10%。
(3)按实验要求预先设计好程序;占10%。
(4)认真记录实验数据并分析实验结果;占10%。
(5)实验后按要求书写实验报告,记录实验用数据及运行结果;占30%。
(6)创新能力强,在实验中设计的程序有一定的通用性,算法优化;
20%。
(7)实验过程中,具有严谨的学习态度,认真、踏实、一丝不苟的科学作风;10%
四、实验教材及参考书
1.Richard J.Spillman:《CLASSICAL AND CONTEMPORARY CRYPTOLOGY》,清华大学出版社,2005-7.
2. William Stallings. Cryptography and Network Security: Principles and Practice. 7th ed. Prentice Hall, 2016.
3. Ling Dong, Kefei Chen. Cryptographic protocol. Security analysis based on trusted freshness. 高等教育出版社,2011-10.
4. 汤永利.《应用密码学》,电子工业出版社,2017-1.
5. 张焕国, 刘玉珍.《密码学引论:第三版》,武汉大学出版社,2015-11.
五、实验内容与报告的要求
实验1、2的内容要求(提示性的)与封面见附录一(打印时将“附录一”3个字去掉)。
实验3的内容要求(提示性的)与封面见附录二(打印时将“附录二”3个字去掉)。
严禁互相抄袭!
一经发现抄袭者与被抄袭者全无成绩!
五、时间与场地
第7-8周周三9-12节,信息学馆B405,软信1801-03班
(附录一)
密码学基础实验报告
实验名称Vigenere和Column Permutation的编程实现
班级软信1803
学号20175095
姓名魏泽钦
日期2019.10.30
成绩
评阅人
软件学院
一、实验目的与意义
简要了解密码学以及现代密码算法的基本知识,学会常用文件加密的实现、了解系统加密解密技术,具体掌握几种加解密方法。
二、实验环境
Win10 VS2019 信息A405
三、实验的预习内容
Vigenere 密码Column Permutation
Vigenere 密码查表:
Column Permutation (列置换)原理:
明文按行填写在一个矩阵中,而密文则是以预定的顺序按列读取生成的。
四、实验的步骤与调试方法
1.算法设计流程
维吉尼亚密码列置换密码
2.实验中遇到的问题及解决方法
无大问题
五、实验数据与实验结果
维吉尼亚密码:
列置换密码:
六、实验用程序清单(要有注释)
1.维吉尼亚密码:
#include
#include
#include
void Encry() {
char key[100];
char ch, temp;
int L, i = 0, j = 0;
int t;
if (getchar() == '\n')
temp = ' ';
printf("请输入秘钥:");
gets(key);
L = strlen(key);
for (t = 0; t < L; t++) {
if (key[j%L] >= 'A'&&key[j%L] <= 'Z') {
key[t] = key[j%L] + 32;
}
j++;
}
printf("输入明文:");
while ((ch = getchar()) != '\n') {
if (ch == ' ') {
i++;
continue;
}
if (ch >= 'a'&&ch <= 'z') {
printf("%c", (ch - 'a' + key[j%L] - 'a') % 26 + 'A');
j++;
}
if (ch >= 'A'&&ch <= 'Z') {
printf("%c", (ch - 'A' + key[j%L] - 'a') % 26 + 'A');
j++;
}
if (j%L == 0) {
printf(" ");
i++;
}
putchar(ch);
}
}
void Decry() {
char key[100];
char ch, temp;
int L, i = 0, j = 0;
int t;
if (getchar() == '\n')
temp = ' ';
printf("请输入秘钥:");
gets(key);
L = strlen(key);
for (t = 0; t < L; t++) {
if (key[j%L] >= 'A'&&key[j%L] <= 'Z') {
key[t] = key[j%L] + 32;
}
j++;
}
printf("输入密文:");
while ((ch = getchar()) != '\n') {
if (ch == ' ') {
i++;
continue;
}
if (ch >= 'A'&&ch <= 'Z') {
printf("%c", (ch + 26 - 'A' - key[j%L] + 'a') % 26 + 'a');
j++;
}
if (j%L == 0)
printf("");
i++;
}
putchar(ch);