ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:152.80KB ,
资源ID:9017162      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9017162.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(古典密码实验报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

古典密码实验报告.docx

1、古典密码实验报告实 验 报 告一、实验室名称:SimpleSPC信息安全云实验系统二、实验项目名称:古典密码置换密码三、实验学时:1学时四、实验原理:1) 算法原理a) 置换密码算法是不改变明文字符,而是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密。将明文中的字母按照给定的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中的字母,从而形成密文。其解密过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据密钥给出的矩阵置换产生新的矩阵,从而恢复明文。b) 置换密码(Permutation Cipher),又称换位密码。算法实施时,明文的字母保持相同,但

2、顺序会被打乱。置换只不过是一个简单的换位,每个置换都可以用一个置换矩阵Ek来表示。每个置换都有一个与之对应的逆置换Dk。置换密码的特点是仅有一个发送方和接受方知道的加密置换(用于加密)及对应的逆置换(用于解密)。它是对明文L长字母组中的字母位置进行重新排列,而每个字母本身并不改变。c) 设n为一固定整数,P、C和K分别为明文空间、密文空间和密钥空间。明/密文是长度为n的字符序列,分别记为X(x1,x2,,xn)属于P和Y(y1,y2,yn)属于C ,K是定义在1,2,n的所有置换组成的集合。对任何一个密钥(即一个置换),定义置换如下: 加密置换为: 解密置换为: 上式中,是的逆置换,密钥空间K

3、的大小为n!2) 算法参数 置换密码算法主要有c、m、k、n四个参数。c为密文,m是明文,k为密钥,n为模数。3) 算法流程 算法流程。如图所示五、实验目的:1)学习置换密码的原理2) 学习置换密码的算法实现六、实验内容: 1.在虚拟机上运行置换密码.exe可执行文件,根据提示输入明文和密钥,同时检查输出的解密后的结果是否与明文一致。2.学习掌握置换密码的原理,并根据明文和密钥计算出对应的加密文,并与程序输出的结果进行比对,掌握其加密解密的过程。3.看懂实验程序代码,如有需要可在其上进行优化。七、实验器材(设备、虚拟机名称):Windows 7工具:C:tools密码学课程01密码学算法02

4、古典密码01 置换密码八、实验步骤:1、查看置换密码算法运行结果并学习其核心算法1.1 点击【置换密码.exe】,选择对明文【asdfgh】使用密钥【qwerty】进行加密,程序运行结果。如下图所示但是在实验中发现,当密钥中包含相同字符时,加密和解密结果会出现问题,如下图所示:在观察程序代码后,发现应该是加密表生成出现问题,因此在实验中我重新修改了程序中计算加密表部分的代码,利用双层循环,对于每一个字符,计算比其小的字符或者和它一样但是出现在其左侧的字符个数,得到的序列便是加密表的内容,将程序按照上述思路修改后测试运行正确。1.2 更新后的置换密码的核心算法如下所示。#include#incl

5、udeusing namespace std;char a206, b206, c206, m102, key6, ky6, mw102, bb102;int zh6, zh16;int j, len, length, e, f;voidISD_zhihuan_zhihuan(int le) int i, s = 0; if (le % 6 = 0) /明文长度是6的倍数时 for (j = 0; j(le / 6); j+) for (i = 0; i6; i+, s+) aji = ms; else /明文长度不是6的倍数时 for (j = 0; j(le - le % 6) / 6);

6、 j+) for (i = 0; i6; i+, s+) aji = ms; j+; int w = 0; for (int l = le - le % 6; lle; l+, w+) ajw = ml; for (int ll = le % 6; ll6; ll+) ajll = X; /数组后补x使数组长度为6的倍数 length = 6 * j;intISD_zhihuan_encrypt() cout endl key; for (int p = 0; p 6; p+) kyp = keyp; /生成置换表 for (int i = 0; i 6; i+) zhi = 1; for (

7、int j = 0; j 6; j+) if (keyj keyi | (j i&keyj = keyi) zhi+; cout endl 加密后的结果为:; int q = 0; for (int g = 0; g = j; g+) for (int h = 0; h 6; h+, q+) bgh = agzhh - 1; /明文进行置换 bbq = bgh; cout bbq; return 0; int ISD_zhihuan_decrypt() int ss6 = 1,2,3,4,5,6 ; for (int w = 0; w6; w+) for (int p = 0; p6; p+)

8、 if (ssw = zhp) zh1w = p + 1; /计算逆置换表 cout endl 解密后的结果为:; int t = 0; for (int g = 0; g = j; g+) for (int h = 0; h6; h+, t+) cgh = bgzh1h - 1; /明文进行逆置换 mwt = cgh; return 0; void main() cout endl; cout m; while (mk != 0) /计算明文长度 k+; len = k; cout 明文长度len= len endl; ISD_zhihuan_zhihuan(len); ISD_zhihua

9、n_encrypt(); ISD_zhihuan_decrypt(); for (int d = 0; dlen + 6; d+) cout mwd; /输出解密后的明文 int y, yy; for (yy = 0; yylen; yy+) if (mwyy = myy) y = 1; else y = 0; if (y = 1) cout endl CRYPT_OK endl; if (y = 0) cout endl CRYPT_ERROR endl; 九、实验结果及分析:测试修改后的程序,结果正确,如下图所示:下面对结果进行分析:对于输入的密钥miaooh计算每个字符的加密置换表值为

10、4 3 1 5 6 2因此可获得加密结果为 evlyao 验证输出结果正确计算每个字符的解密置换表值为 3 6 2 1 4 5因此可获得解密结果为 loveya十、实验结论:置换密码作为传统古典密码的一种,思想比较简单,即将明文按照密钥的长度一行一行地写成一个矩阵,然后每一行按密钥的顺序将明文读出获得的即为加密文。但是由于置换密码只是将明文简单地作顺序改变,字符并没有变化,因此破译起来比较容易,安全性较低。十一、总结及心得体会:作为第一个实验,熟悉了实验的操作环境,并学会了置换密码的原理,尝试对明文进行加密并将其解密。通过查看程序源码对加密方法了解更加透彻,在将源码进行修改后解决了密钥中包含相

11、同字符结果出错的问题,收获很大,为以后其他加密算法的学习作准备。实 验 报 告学生姓名李昕宜学号201500130052指导老师实验地点N3实验时间2018/3/19班级一班十二、实验室名称:SimpleSPC信息安全云实验系统十三、实验项目名称:古典密码Vigenere密码十四、实验学时:1学时十五、实验原理:1) 算法原理 a) Vigenere密码是由法国密码学家Blaise de Vigenere于1858年提出的一种代换密码,它是多表代换密码的典型代表。b) 定义:设m为某一固定的正整数,P、C和K分别为明文空间、密文空间和密钥空间,并且P=K=C=(Z26)m,对一个密钥k=(k1

12、,k2,km),定义维吉尼亚密码的加解密算法如下: Vigenere密码加密算法: ek(x1,x2,xm)=(x1+k1,x2+k2,xm+km) Vigenere密码解密算法: dk(y1,y2,ym)=(y1-k1,y2-k2,ym-km)。 其中k=(k1,k2,km)是一个长为m的密钥字,密钥空间的大小为26m,所以对一个相对小的m,穷举密钥也需要很长的时间。如m=7,则密钥空间大小超过8109,所以手工搜索非常困难。当明文的长度超过m时,可将明文串按长度m分局,然后对每一组使用密钥k加密。 2) 算法参数 Vigenere密码算法主要有c、m、k三个个参数。c为密文,m是明文,k为

13、密钥。3) 算法流程 算法流程如下。如图所示十六、实验目的:1) 学习维吉尼亚算法的原理2) 学习维吉尼亚算法的实现十七、实验内容:1.在虚拟机上运行Vigenere.exe可执行文件,根据提示输入明文和密钥,同时检查输出的解密后的结果是否与明文一致。2.学习掌握维吉尼亚算法的原理,并根据明文和密钥计算出对应的加密文,并与程序输出的结果进行比对,掌握其加密解密的过程。3.看懂实验程序代码,如有需要可在其上进行优化。十八、实验器材(设备、虚拟机名称):Windows 7工具:C:tools密码学课程01密码学算法02 古典密码03 vigenere密码算法十九、实验步骤:一、查看维吉尼亚密码算法

14、运行结果并学习其核心算法1.1 点击文件【Vigenere.exe】,输入指令【v】,输入明文【xipuyangguang】,即可得到密钥和密文和明文,如图1所示图11.2 维吉尼亚密码的核心算法如下所示。根据实验中已给代码进行分析了解了维吉尼亚密码的实现步骤,将主程序中没有用到的生命变量去掉,加入一些交互语句得到如下代码:#include #include #include #include #include using namespace std;void ISD_Vigenere_crypt(char m, char k, char r) int i, j, s = 0; j = str

15、len(k); for (i = 0; mi; i+) mi = tolower(mi); for (i = 0; ki; i+) ki = tolower(ki); for (i = 0; mi; i+) if (isalpha(mi) ri = (mi - a + ks%j - a) % 26 + a; s+; /*s用来跳过明文中的空格字符*/ else ri = mi; ri = 0; /*密文字符串结束符*/voidISD_Vigenere_decrypt(char c, char k, char m) int i, j, s = 0; j = strlen(k); for (i =

16、 0; ci; i+) ci = tolower(ci); for (i = 0; ki; i+) ki = tolower(ki); for (i = 0; ci; i+) if (isalpha(ci) mi = (ci - ks%j + 26) % 26 + a; s+; else mi = ci; mi = 0;void main(int argc, char *argv) char m1024; printf(古典密码算法演示程序); char command; printf(n); cout 输入v:维吉尼亚加密!n; cout 输入h:获得帮助!n; cout 输入e:退出程序!

17、n; cout command; switch (command) case v: char k = best; coutm; char c80; char d80; ISD_Vigenere_crypt(m, k, c); ISD_Vigenere_decrypt(c, k, d); cout 明文: ; puts(m); cout 密钥: ; puts(k); cout 加密结果: ; puts(c); cout 解密结果: ; puts(d); goto loop; case e: return; case h: ; cout 输入v:维吉尼亚加密!n; cout 输入h:获得帮助!n;

18、 cout 输入e:退出程序!n; goto loop; default: goto loop; 二十、实验结果及分析:测试程序,结果正确,如下图所示:明文 nomo reco unti ngdo llar s密钥 be s t best best best best b加密 os eh siuh vrlb okvh mpsk t解密nomo reco unti ngdo llar s验证结果与输出一致,正确二十一、实验结论:维吉尼亚密码加密方法是根据密钥内容,对输入的明文的字母进行替换,在密钥长度大于1的情况下,通常来说相同的字母也会由于对应的密钥字符不同而被不同的字符所替换,因此在一定程度

19、上来说保证了加密技术的安全性,但是若已知密钥的长度且有足够多样本的情况下,同样也可以做词频分析从而破译密码。二十二、总结及心得体会:维吉尼亚密码作为古典密码中的一种,加密原理简单易懂,程序实现也没有太大的困难,并且在密钥长度较长时加密安全性也可以有一定保证,较难破译,但用频率分析法可以破译已知密钥长度的密文,因此对于现代技术来说容易破译,但通过学习维吉尼亚密码学到了其加密的原理和基于统计破译密码的思想,收获很大。实 验 报 告学生姓名李昕宜学号201500130052指导老师实验地点N3实验时间2018/3/20班级一班一、实验室名称:SimpleSPC信息安全云实验系统二、实验项目名称:古典

20、密码代换密码三、实验学时:1学时四、实验原理:1) 单表代换密码a) 加法密码 A和B是有 n个字母的字母表。 定义一个由A到B的映射:f:AB f(ai )= bi=aj j=i+k mod n 加法密码是用明文字母在字母表中后面第 k个字母来代替。 K=3 时是著名的凯撒密码。 恺撒密码历史上第一个密码技术 “恺撒密码”是古罗马恺撒大帝在营救西塞罗战役时用来保护重要军情的加密系统(高卢战记)。b) 乘法密码 A和B是有n个字母的字母表。?定义一个由A到B的映射:f:AB f(ai )= bi= aj j=ik mod n 其中,(n,k)=1。注意:只有(n,k)=1,才能正确解密。c)

21、密钥词组代替密码 随机选一个词语,去掉其中的重复字母,写到矩阵的第一行,从明文字母表中去掉这第一行的字母,其余字母顺序写入矩阵。然后按列取出字母构成密文字母表2) 多表代换密码 单表代替密码的安全性不高,一个原因是一个明文字母只由一个密文字母代替。可以利用频率分析来破译。故产生了更为安全的多表代换密码,即构造多个密文字母表,在密钥的控制下用以一系列代换表依次对明文消息的字母序列进行代换。著名的多表代替密码有Vigenere密码等。a) Vernam密码 明文、密文、密钥都表示为二进制位: M=m1,m2, ,mn K =k1,k2, ,kn C =c1,c2, ,cnb) Playfair密码

22、 用密钥控制生成矩阵,然后每两个字母为单位进行代换。c) Hill密码(乘积密码) 建立在矩阵相乘的基础上,但不能抵抗已知明文攻击。五、实验目的:2)学习代换密码的原理2) 学习代换密码的算法实现六、实验内容:1.在虚拟机上运行代换密码.exe可执行文件,根据提示输入明文和密钥,同时输入之前得到的密文和密钥检查输出的解密后的结果是否与明文一致。2.学习掌握代换密码的基本思想,了解其分类和不同代换密码之间的区别与共同点,并根据明文和密钥计算出对应的加密文,并与程序输出的结果进行比对,掌握其加密解密的过程。3.看懂实验程序代码,如有需要可在其上进行优化。七、实验器材(设备、虚拟机名称):Windo

23、w 7工具:C:tools密码学课程01密码学算法02 古典密码04 代换密码八、实验步骤:一、查看代换密码算法运行结果并学习核心算法1.1 运行可执行程序,结果如下(注意:这里输入的字符串位数最多不超过5个)。如图1所示图 11.2 源码阅读在实验中发现提供的源码和代换密码.exe文件无法对应,因此我根据可执行文件进行试验观察发现,程序是将待加密明文中的每一个字符的ASCII码与密钥的值相加,加密结果就是ASCII码和对应的字符,根据这个思路写的程序如下所示:#include #include using namespace std;int main() cout 请输入待加密的明文: m;

24、 cout 请输入密钥: k; int i = 0; for (; i m.length(); i+) ci = mi + k; ci = n; cout 密文为:endl c endl请输入待解密的密文: com; cout 请输入密钥: k; cout 解密后的明文为: endl; char ming10=; i = 0; for (; i com.length(); i+) mingi = ci - k; mingi = n; cout ming endl; return 0;九、实验结果及分析:测试修改后的程序,结果正确,如下图所示:d+20=xb+20=vc+20=wa+20=u十、

25、实验结论:在本次实验中了解到代换密码分为单表代换密码和多表代换密码,其中多表代换密码中由于用多个代换表进行加密,因此安全性要比单表代换密码更强。代换密码的思想是要首先建立一个代换表(即密钥),加密时需要将加密的明文依次通过查表,替换为相应的字符,明文字符被逐个替换后生成密文,需要注意的是将代换密码和置换密码进行区分,置换密码只是更换明文中字符的顺序,只是进行位置的置换。而之前学到的维吉尼亚密码是代换密码的一种。十一、总结及心得体会:本次实验中接触到的代换密码我们已经很熟悉了,因为维吉尼亚密码是多表代换中重要的一种,同时我们还需要将其和之前学到的置换密码区分开,实验中发现,若将多表代换密码的技术和置换密码的技术结合起来得到的加密技术的安全性应该有很高的保证。实 验 报 告学生姓名李昕宜学号201500130052指导老师实验地点N3实验时间2018/3/20班级一班一、实验室名称:SimpleSPC信息安全云实验系统二、实验项目名称:古典密码移位密码三、实验学时:1学时四、实验原理:1) 算法原理a) 移位密码就是对26个字母进行移位操作,可以移动任意位数,这样就实现了对明文的加密,移位操作简单易行,因此,加密解密比较简单。b) 移位密码的基本思想:移位密码算法 c=m+k(mod 26),k可以使0k26的任意整数。加密算法:x=x+k

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1