- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《信息安全学》实验
云南大学软件学院
实 验 报 告
课程: 信息安全学实验 任课教师:
专业: 学号: 姓名: 成绩:
实验1 古典密码算法
实验目的
通过编程实现替代密码算法和置换密码算法,加深对古典密码体系的了解,为以后深入学习密码学奠定基础。
实验原理
古典密码算法曾被广泛应用,大都比较简单。它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。其中替代密码和置换密码是具有代表性的两种古典密码算法。
实验环境
PC机,C或C++编译环境
实验内容和步骤
根据实验原理部分对替代密码算法的介绍,同时查找和学习相关知识,自己创建明文信息,并选择一个密钥,编写替代密码算法的实现程序,实现加密和解密操作。
对于替换密码,在本实验分别实现了移位密码和维吉尼亚密码,其中维吉尼亚算法中能够对文本文件进行加密和解密操作。
移位密码
程序流程图:
开始
开始
2
2
输入密文
输入密文c
输入1或2
1
1
输入密钥k
输入密钥k
输入明文m
输入密钥k
输入密钥k
j=0
c[j]=(c[j]-k-‘a’+26)%26+’a’j++
c[j]=(c[j]-k-‘a’+26)%26+’a’
j++
i=0
m[i]=(m[i]+k-‘a’)%26+’a’
m[i]=(m[i]+k-‘a’)%26+’a’
i++
c[j]=’\0’
c[j]=’\0’
否
否
否m
否
m[i]=’\0’0
是
是
是输出明文
是
输出明文m
输出
输出密文c
结束
结束
算法设计:
实现加密的过程中,先输入明文m,明文以字符串的形式储存在数组中,再输入密钥k,密钥范围为1-25,加密函数encrypt对明文m中的字符进行逐个加密E(m)=(m+k)mod26。解密时先输入需要解密的密文c,密文以字符串的形式储存在数组中,再输入相对应的密钥k,解密函数decrypt对密文c中的字符进行逐个解密D(c)=(c-k)mod26。该算法中时间复杂度为O(n)。
测试结果截图:
维吉尼亚密码
程序流程图:
开始
开始
2
2
输入密文
输入密文c
输入1或2
1
1
输入密钥k
输入密钥k
输入明文m
输入密钥k
输入密钥k
i=0
l=k
l=k的长度
i=0
i=0
j=0
j=0
l=k
l=k的长度
c[i]=(c[i]-k[j]
c[i]=(c[i]-k[j]-‘a’+26)%26+’a’,
i++,j++
j=0
m[i]=(m[i]+k[j]-‘a’)%26+’a’,
m[i]=(m[i]+k[j]-‘a’)%26+’a’,
i++,j++
否j
否
j0
是否j
是
否
jl
否c[i]=’\0’
否
c[i]=’\0’
是
是
否m
否
m[i]=’\0’0
是
是
是输出
是
输出明文m
输出
输出密文c
结束
结束
算法设计:
加密过程中,先输入明文m,明文以字符串的形式储存在数组中,再输入密钥k,维吉尼亚密码在移位密码的基础上增大了密钥空间,密钥以字符串的形式储存于数组中,加密函数encrypt按照密钥的字符循环对明文m中的字符进行逐个加密。解密时先输入需要解密的密文c,密文以字符串的形式储存在数组中,再输入相对应的密钥k并储存在数组中,解密函数decrypt对密文c中的字符进行逐个解密。该算法中时间复杂度为O(n)。
测试结果截图:
对字符串加密:
对文本文件加密:
根据实验原理部分对置换密码算法的介绍,同时查找和学习相关知识,自己创建明文信息,并选择一个密钥,编写置换密码算法的实现程序,实现加密和解密操作。
该置换算法可以对文本文件进行加密解密操作。
程序流程图:
开始
开始
2
2
输入密文
输入密文c
输入1或2
1
1
输入密钥k
输入密钥k
输入明文m
算出明文
算出明文的行数列数并存入二维数组
输入密钥k
算出
算出明文的行数列数并存入二维数组
算出反向
算出反向置换函数
对
对二维数组中的密文进行两次列置换
算出
算出置换函数
将二维数组中的字符串放入一维数组
将二维数组中的字符串放入一维数组
对二维数组中的明文进行两次列置换
将
将二维数组中的字符串放入一维数组
输出
输出明文m
输出
输出密文c
结束
结束
算法设计:
实现置换密码加密过程,先输入明文m,明文以字符串的形式储存在数组中,再输入密钥k,密钥以字符串的形式储存于数组中,若明文不能被密钥整除,则在明文后随机添加字母使其能够被密钥整除。对密钥字符串进行冒泡排序,根据密钥中字母得出置换函数f,将明文m存入二维数组,可以选择需要进行置换的次数
文档评论(0)