版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
古典密码实验报告古典密码实验报告古典密码实验报告实验报告实验室名称:SimpleSPC信息安全云实验系统实验项目名称:古典密码——置换密码实验学时:1学时实验原理:1)算法原理a)置换密码算法就是不改变明文字符,而就是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密。将明文中的字母按照给定的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中的字母,从而形成密文。其解密过程就是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据密钥给出的矩阵置换产生新的矩阵,从而恢复明文。b)置换密码(PermutationCipher),又称换位密码。算法实施时,明文的字母保持相同,但顺序会被打乱。置换只不过就是一个简单的换位,每个置换都可以用一个置换矩阵Ek来表示。每个置换都有一个与之对应的逆置换Dk。置换密码的特点就是仅有一个发送方与接受方知道的加密置换(用于加密)及对应的逆置换(用于解密)。它就是对明文L长字母组中的字母位置进行重新排列,而每个字母本身并不改变。c)设n为一固定整数,P、C与K分别为明文空间、密文空间与密钥空间。明/密文就是长度为n的字符序列,分别记为X(x1,x2,…,xn)属于P与Y(y1,y2,…,yn)属于C,K就是定义在{1,2,…,n}的所有置换组成的集合。对任何一个密钥(即一个置换),定义置换如下:
加密置换为:
解密置换为:
上式中,就是的逆置换,密钥空间K的大小为n!2)算法参数
置换密码算法主要有c、m、k、n四个参数。c为密文,m就是明文,k为密钥,n为模数。3)算法流程
算法流程。如图所示实验目的:学习置换密码的原理2)学习置换密码的算法实现实验内容:1、在虚拟机上运行置换密码、exe可执行文件,根据提示输入明文与密钥,同时检查输出的解密后的结果就是否与明文一致。2、学习掌握置换密码的原理,并根据明文与密钥计算出对应的加密文,并与程序输出的结果进行比对,掌握其加密解密的过程。3、瞧懂实验程序代码,如有需要可在其上进行优化。实验器材(设备、虚拟机名称):Windows7工具:C:\tools\密码学课程\01密码学算法\02古典密码\01置换密码实验步骤:1、查瞧置换密码算法运行结果并学习其核心算法1、1
点击【置换密码、exe】,选择对明文【asdfgh】使用密钥【qwerty】进行加密,程序运行结果。如下图所示
但就是在实验中发现,当密钥中包含相同字符时,加密与解密结果会出现问题,如下图所示:在观察程序代码后,发现应该就是加密表生成出现问题,因此在实验中我重新修改了程序中计算加密表部分的代码,利用双层循环,对于每一个字符,计算比其小的字符或者与它一样但就是出现在其左侧的字符个数,得到的序列便就是加密表的内容,将程序按照上述思路修改后测试运行正确。1、2
更新后的置换密码的核心算法如下所示。#include<iostream>#include<algorithm>usingnamespacestd;chara[20][6],b[20][6],c[20][6],m[102],key[6],ky[6],mw[102],bb[102];intzh[6],zh1[6];intj,len,length,e,f;voidISD_zhihuan_zhihuan(intle){ inti,s=0; if(le%6==0) //明文长度就是6的倍数时 { for(j=0;j<(le/6);j++) for(i=0;i<6;i++,s++) { a[j][i]=m[s]; } } else //明文长度不就是6的倍数时 { for(j=0;j<((le-le%6)/6);j++) for(i=0;i<6;i++,s++) { a[j][i]=m[s]; } j++; intw=0; for(intl=le-le%6;l<le;l++,w++) { a[j][w]=m[l]; } for(intll=le%6;ll<6;ll++) { a[j][ll]='X'; //数组后补x使数组长度为6的倍数 } } length=6*j;}intISD_zhihuan_encrypt(){ cout<<endl<<"请输入密钥,要求就是6位字母:"; cin>>key; for(intp=0;p<6;p++) { ky[p]=key[p]; } //生成置换表 for(inti=0;i<6;i++){ zh[i]=1; for(intj=0;j<6;j++){ if(key[j]<key[i]||(j<i&&key[j]==key[i])){ zh[i]++; } } } cout<<endl<<"加密后的结果为:"; intq=0; for(intg=0;g<=j;g++) for(inth=0;h<6;h++,q++) { b[g][h]=a[g][zh[h]-1]; //明文进行置换 bb[q]=b[g][h]; cout<<bb[q]; } return0;} intISD_zhihuan_decrypt() { intss[6]={1,2,3,4,5,6}; for(intw=0;w<6;w++) { for(intp=0;p<6;p++) { if(ss[w]==zh[p]) zh1[w]=p+1; //计算逆置换表 } } cout<<endl<<"解密后的结果为:"; int t=0; for(intg=0;g<=j;g++) for(inth=0;h<6;h++,t++) { c[g][h]=b[g][zh1[h]-1]; //明文进行逆置换 mw[t]=c[g][h]; } return0; } void main() { cout<<endl; cout<<"请输入明文:"; intk=0; cin>>m; while(m[k]!='\0') //计算明文长度 k++; len=k; cout<<"明文长度len="<<len<<endl; ISD_zhihuan_zhihuan(len); ISD_zhihuan_encrypt(); ISD_zhihuan_decrypt(); for(intd=0;d<len+6;d++) cout<<mw[d]; //输出解密后的明文 inty,yy; for(yy=0;yy<len;yy++) { if(mw[yy]==m[yy]) y=1; else y=0; } if(y=1) cout<<endl<<"CRYPT_OK"<<endl; if(y=0) cout<<endl<<"CRYPT_ERROR"<<endl; }实验结果及分析:测试修改后的程序,结果正确,如下图所示:下面对结果进行分析:对于输入的密钥miaooh计算每个字符的加密置换表值为431562因此可获得加密结果为evlyao验证输出结果正确计算每个字符的解密置换表值为362145因此可获得解密结果为loveya实验结论:置换密码作为传统古典密码的一种,思想比较简单,即将明文按照密钥的长度一行一行地写成一个矩阵,然后每一行按密钥的顺序将明文读出获得的即为加密文。但就是由于置换密码只就是将明文简单地作顺序改变,字符并没有变化,因此破译起来比较容易,安全性较低。总结及心得体会:作为第一个实验,熟悉了实验的操作环境,并学会了置换密码的原理,尝试对明文进行加密并将其解密。通过查瞧程序源码对加密方法了解更加透彻,在将源码进行修改后解决了密钥中包含相同字符结果出错的问题,收获很大,为以后其她加密算法的学习作准备。实验报告学生姓名李昕宜学号2指导老师实验地点N3实验时间2018/3/19班级一班实验室名称:SimpleSPC信息安全云实验系统实验项目名称:古典密码——Vigenere密码实验学时:1学时实验原理:1)算法原理
a)Vigenere密码就是由法国密码学家BlaisedeVigenere于1858年提出的一种代换密码,它就是多表代换密码的典型代表。b)定义:设m为某一固定的正整数,P、C与K分别为明文空间、密文空间与密钥空间,并且P=K=C=(Z26)m,对一个密钥k=(k1,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,则密钥空间大小超过8×109,所以手工搜索非常困难。当明文的长度超过m时,可将明文串按长度m分局,然后对每一组使用密钥k加密。
2)算法参数
Vigenere密码算法主要有c、m、k三个个参数。c为密文,m就是明文,k为密钥。3)算法流程
算法流程如下。如图所示实验目的:1)学习维吉尼亚算法的原理2)学习维吉尼亚算法的实现实验内容:1、在虚拟机上运行Vigenere、exe可执行文件,根据提示输入明文与密钥,同时检查输出的解密后的结果就是否与明文一致。2、学习掌握维吉尼亚算法的原理,并根据明文与密钥计算出对应的加密文,并与程序输出的结果进行比对,掌握其加密解密的过程。3、瞧懂实验程序代码,如有需要可在其上进行优化。实验器材(设备、虚拟机名称):Windows7工具:C:\tools\密码学课程\01密码学算法\02古典密码\03vigenere密码算法实验步骤:一、查瞧维吉尼亚密码算法运行结果并学习其核心算法1、1
点击文件【Vigenere、exe】,输入指令【v】,输入明文【xipuyangguang】,即可得到密钥与密文与明文,如图1所示图11、2
维吉尼亚密码的核心算法如下所示。根据实验中已给代码进行分析了解了维吉尼亚密码的实现步骤,将主程序中没有用到的生命变量去掉,加入一些交互语句得到如下代码:#include<ctype、h>#include<stdio、h>#include<conio、h>#include<string、h>#include<iostream>usingnamespacestd;voidISD_Vigenere_crypt(charm[],chark[],charr[]){ inti,j,s=0; j=strlen(k); for(i=0;m[i];i++) m[i]=tolower(m[i]); for(i=0;k[i];i++) k[i]=tolower(k[i]); for(i=0;m[i];i++) if(isalpha(m[i])) { r[i]=(m[i]-'a'+k[s%j]-'a')%26+'a'; s++; /*s用来跳过明文中的空格字符*/ } else r[i]=m[i]; r[i]=0; /*密文字符串结束符*/}voidISD_Vigenere_decrypt(charc[],chark[],charm[]){ inti,j,s=0; j=strlen(k); for(i=0;c[i];i++) c[i]=tolower(c[i]); for(i=0;k[i];i++) k[i]=tolower(k[i]); for(i=0;c[i];i++) if(isalpha(c[i])) { m[i]=(c[i]-k[s%j]+26)%26+'a'; s++; } else m[i]=c[i]; m[i]=0;}voidmain(intargc,char*argv[]){ charm[1024]; printf("古典密码算法演示程序"); charcommand; printf("\n"); cout<<"输入v:维吉尼亚加密!\n"; cout<<"输入h:获得帮助!\n"; cout<<"输入e:退出程序!\n"; cout<<"请输入指令:";loop:cin>>command; switch (command) { case'v': { chark[]="best"; cout<<"\ninputplaintext:"; cin>>m; charc[80]; chard[80]; ISD_Vigenere_crypt(m,k,c); ISD_Vigenere_decrypt(c,k,d); cout<<"明文:"; puts(m); cout<<"密钥:"; puts(k); cout<<"加密结果:"; puts(c); cout<<"解密结果:"; puts(d); gotoloop; } case'e': { return; } case'h': ; { cout<<"输入v:维吉尼亚加密!\n"; cout<<"输入h:获得帮助!\n"; cout<<"输入e:退出程序!\n"; gotoloop; } default: gotoloop; }}实验结果及分析:测试程序,结果正确,如下图所示:明文nomorecountingdollars密钥bestbestbestbestbestb加密osehsiuhvrlbokvhmpskt解密nomorecountingdollars验证结果与输出一致,正确实验结论:维吉尼亚密码加密方法就是根据密钥内容,对输入的明文的字母进行替换,在密钥长度大于1的情况下,通常来说相同的字母也会由于对应的密钥字符不同而被不同的字符所替换,因此在一定程度上来说保证了加密技术的安全性,但就是若已知密钥的长度且有足够多样本的情况下,同样也可以做词频分析从而破译密码。总结及心得体会:维吉尼亚密码作为古典密码中的一种,加密原理简单易懂,程序实现也没有太大的困难,并且在密钥长度较长时加密安全性也可以有一定保证,较难破译,但用频率分析法可以破译已知密钥长度的密文,因此对于现代技术来说容易破译,但通过学习维吉尼亚密码学到了其加密的原理与基于统计破译密码的思想,收获很大。实验报告学生姓名李昕宜学号2指导老师实验地点N3实验时间2018/3/20班级一班实验室名称:SimpleSPC信息安全云实验系统实验项目名称:古典密码——代换密码实验学时:1学时实验原理:1)单表代换密码a)加法密码
A与B就是有n个字母的字母表。
定义一个由A到B的映射:f:A→B
f(ai)=bi=aj
j=i+kmodn
加法密码就是用明文字母在字母表中后面第k个字母来代替。
K=3时就是著名的凯撒密码。
恺撒密码——历史上第一个密码技术
“恺撒密码”就是古罗马恺撒大帝在营救西塞罗战役时用来保护重要军情的加密系统(《高卢战记》)。b)乘法密码
A与B就是有n个字母的字母表。?定义一个由A到B的映射:f:A→Bf(ai)=bi=ajj=ikmodn其中,(n,k)=1。注意:只有(n,k)=1,才能正确解密。c)密钥词组代替密码
随机选一个词语,去掉其中的重复字母,写到矩阵的第一行,从明文字母表中去掉这第一行的字母,其余字母顺序写入矩阵。然后按列取出字母构成密文字母表2)多表代换密码
单表代替密码的安全性不高,一个原因就是一个明文字母只由一个密文字母代替。可以利用频率分析来破译。故产生了更为安全的多表代换密码,即构造多个密文字母表,在密钥的控制下用以一系列代换表依次对明文消息的字母序列进行代换。著名的多表代替密码有Vigenere密码等。a)Vernam密码
明文、密文、密钥都表示为二进制位:
M=m1,m2,…,mnK=k1,k2,…,knC=c1,c2,…,cnb)Playfair密码
用密钥控制生成矩阵,然后每两个字母为单位进行代换。c)Hill密码(乘积密码)
建立在矩阵相乘的基础上,但不能抵抗已知明文攻击。实验目的:学习代换密码的原理2)学习代换密码的算法实现实验内容:1、在虚拟机上运行代换密码、exe可执行文件,根据提示输入明文与密钥,同时输入之前得到的密文与密钥检查输出的解密后的结果就是否与明文一致。2、学习掌握代换密码的基本思想,了解其分类与不同代换密码之间的区别与共同点,并根据明文与密钥计算出对应的加密文,并与程序输出的结果进行比对,掌握其加密解密的过程。3、瞧懂实验程序代码,如有需要可在其上进行优化。实验器材(设备、虚拟机名称):Window7工具:C:\tools\密码学课程\01密码学算法\02古典密码\04代换密码实验步骤:一、查瞧代换密码算法运行结果并学习核心算法1、1
运行可执行程序,结果如下(注意:这里输入的字符串位数最多不超过5个)。如图1所示图11、2源码阅读在实验中发现提供的源码与代换密码、exe文件无法对应,因此我根据可执行文件进行试验观察发现,程序就是将待加密明文中的每一个字符的ASCII码与密钥的值相加,加密结果就就是ASCII码与对应的字符,根据这个思路写的程序如下所示:#include<string>#include<iostream>usingnamespacestd;intmain(){ cout<<"请输入待加密的明文:"<<endl; stringm; charc[10]=""; intk; cin>>m; cout<<"请输入密钥:"<<endl; cin>>k; inti=0; for(;i<m、length();i++){ c[i]=m[i]+k; } c[i]='\n'; cout<<"密文为:"<<endl<<c<<endl<<"请输入待解密的密文:"<<endl; stringcom; cin>>com; cout<<"请输入密钥:"<<endl; cin>>k; cout<<"解密后的明文为:"<<endl; charming[10]=""; i=0; for(;i<com、length();i++){ ming[i]=c[i]-k; } ming[i]='\n'; cout<<ming<<endl; return0;}实验结果及分析:测试修改后的程序,结果正确,如下图所示:‘d’+20=’x’‘b’+20=’v’‘c’+20=’w’‘a’+20=’u’实验结论:在本次实验中了解到代换密码分为单表代换密码与多表代换密码,其中多表代换密码中由于用多个代换表进行加密,因此安全性要比单表代换密码更强。代换密码的思想就是要首先建立一个代换表(即密钥),加密时需要将加密的明文依次通过查表,替换为相应的字符,明文字符被逐个替换后生成密文,需要注意的就是将代换密码与置换密码进行区分,置换密码只就是更换明文中字符的顺序,只就是进行位置的置换。而之前学到的维吉尼亚密码就是代换密码的一种。总结及心得体会:本次实验中接触到的代换密码我们已经很熟悉了,因为维吉尼亚密码就是多表代换中重要的一种,同时我们还需要将其与之前学到的置换密码区分开,实验中发现,若将多表代换密码的技术与置换密码的技术结合起来得到的加密技术的安全性应该有很高的保证。实验报告学生姓名李昕宜学号2指导老师实验地点N3实验时间2018/3/20班级一班实验室名称:SimpleSPC信息安全云实验系统实验项目名称:古典密码——移位密码实验学时:1学时实验原理:1)算法原理a)移位密码就就是对26个字母进行移位操作,可以移动任意位数,这样就实现了对明文的加密,移位操作简单易行,因此,加密解密比较简单。b)移位密码的基本思想:移位密码算法c=m+k(mod26),k可以使0<k<26的任意整数。加密算法:x=x+k(mod26),解密算法x=x-k(mod26)。当K=3,时,为凯撒密码。2)算法参数
移位密码算法主要有c、m、k三个参数。c为密文,m就是明文,k为密钥。3)算法流程
算法流程如下。如图所示实验目的:1)学习移位密码的原理2)学习移密码的实现实验内容:1、在虚拟机上运行移位密码、exe可执行文件,根据提示输入明文与密钥,同时检查输出的解密后的结果就是否与明文一致。2、学习掌握移位密码的原理,并根据明文与密钥计算出对应的加密文,并与程序输出的结果进行比对,掌握其加密解密的过程。3、瞧懂实验程序代码,如有需要可在其上进行优化。实验器材(设备、虚拟机名称):Windows7工具:C:\tools\密码学课程\01密码学算法\02古典密码\06移位密码算法实验步骤:一、查瞧移位密码算法运行结果并学习核心算法1、1点击【移位密码、exe】,选择【0】对明文进行加密。如图1所示图11、2重新运行程序,选择【1】,对密文进行解密。如图2所示图21、3移位密码的核心算法如下所示。//#include"stdafx、h"#include<iostream>#include"conio、h"#include<string>usingnamespacestd;voidISD_yiwei_Secret(string&code,intk){ inti; for(i=0;i<code、length();i++) { if((code[i]+k)>'z') { code[i]=((code[i]+k)%'z')+'a'-1; } else { code[i]=code[i]+k; } code[i]=code[i]-32; }}voidISD_yiwei
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度电力行业风险管理电力购销合同范本3篇
- 2025年铁路货运合同第三方监管范本3篇
- 二零二五版美容院设备采购与维护服务合同4篇
- 2025年项目施工安全协议书完善施工现场安全管理体系3篇
- 二零二五版生活垃圾处理设施投资建设合作协议3篇
- 2025年项目部安全生产责任协议书执行示范范本3篇
- 二零二五年度高效节能型10KV线路及变台安装施工合作协议3篇
- 2025年度农业大棚租赁与智能控制系统安装合同2篇
- 个人健身会员卡2024年度合同2篇
- 2025版铝塑窗环保材料认证与推广合同4篇
- 人教版初中语文2022-2024年三年中考真题汇编-学生版-专题08 古诗词名篇名句默写
- 2024-2025学年人教版(2024)七年级(上)数学寒假作业(十二)
- 山西粤电能源有限公司招聘笔试冲刺题2025
- 医疗行业软件系统应急预案
- 使用错误评估报告(可用性工程)模版
- 《精密板料矫平机 第2部分:技术规范》
- 2024光伏发电工程交流汇流箱技术规范
- 旅游活动碳排放管理评价指标体系构建及实证研究
- 2022年全国职业院校技能大赛-电气安装与维修赛项规程
- 2024年黑龙江省政工师理论知识考试参考题库(含答案)
- 四年级上册脱式计算300题及答案
评论
0/150
提交评论