魏泽钦20175095密码学实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档