




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《信息系统安全》课程实验指导书实验学时:课内实验18学时实验类型:验证性实验要求:必修适用对象:软件工程实验一:古典密码算法---代换技术(4学时)一、实验目的通过本实验的学习,使学生编程实现古典密码算法中的代换密码技术,培养学生的编程能力和对基础算法的理解,加深对古典密码体制技术的了解,为今后继续深入现代密码学的学习奠定基础。二、实验内容实现代换密码的加解密;三、实验原理、方法和手段古典密码算法历史上曾被广泛应用,大都使用手工和机械操作来实现加密和解密,比较简单。古典密码主要是利用密码算法实现文字信息的加密和解密,本实验运用两种常见的具有代表性的古典密码技术---代换密码技术,以帮助学生对密码算法建立一个初步的认识和印象。代换密码:代换密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文。例如:明文字母a,b,c,d,用D,E,F,G做对应替换后形成密文。代换密码包括多种类型,如单表替代密码,多明码替代密码,多字母替代密码,多表替代密码等.本实验利用一种典型的单表替代密码---恺撒(caesar)密码,又叫循环移位密码,加密方法是将明文中的每个字符,用此字符在字母表中后面第k个字母替代,加密过程可以表示为下面的函数:E(m)=(m+k)modn其中:m为明文字母在字母表中的位置数;n为字母表中的字母个数;k为密钥;E(m)为密文字母在字母表中对应的位置数。例如,对于明文字母H,其在字母表中的位置数为8,设k=4,则按照上式计算出来的密文为L:E(8)=(m+k)modn=(8+4)mod26=12=L四、实验环境、条件运行Windows7操作系统的PC机,具有C语言编译环境。五、实验组织运行要求根据本实验的特点、要求和具体条件,采用以学生自主训练为主的开放模式组织教学,每个学生按照实验指导书,独立完成实验。六、实验步骤根据实验原理部分对凯撒密码算法的介绍,自己创建明文信息,并选择一个密钥k,编写凯撒密码算法的实现程序,实现加密和解密操作.参考程序:1.加密:K=4ttinclude<stdio.h>main()charc;uhile((c=getchar())!='\n')if(c>=,a,&&c<=,z,||c>='A,&&c<=,Z,)c=c+4;if(c>,Z,&&c<=,Z,+4|lO'z1)c=c-26;printf("^c",c);printf;2.解密密文:VSRQJHEREVTXDUHSDQWYU:defdecrypt_password(password,offset)pwdLength=len(password)forindexinrange(pwdLength):ascciiNum=ord(password[index])-65+offsetascciCha=chr(ascciiNum%26+65)pwd+=str(ascciCha)returnpwdforindexinrange(0,26):printdecrypt_password("VSRQJHEREVTXDUHSDQWU”,-3).lower()明文为:spongebobsquarepantr七、实验报告本实验为古典密码学算法的验证类实验,需要按实验报告模板的表格填写,具体要求如下:(1)实验总结要反映实验步骤中的结果,并提供文字描述。(2)除教师评语外,实验报告表中的每项内容均由本实验的同学填写。(3)实验总结和实验自我评语,严禁雷同。(4)实验报告需要按实验报告模板的格式进行填写。实验二:古典密码算法---置换技术(4学时)一、实验目的通过本实验的学习,使学生编程实现古典密码算法中的置换密码技术,培养学生的编程能力和对基础算法的理解,加深对古典密码体制技术的了解,为今后继续深入现代对称密码学的学习奠定基础。二、实验内容实现置换密码的加解密。三、实验原理、方法和手段古典密码算法历史上曾被广泛应用,大都使用手工和机械操作来实现加密和解密,比较简单。古典密码主要是利用密码算法实现文字信息的加密和解密,本实验运用常见的具有代表性的古典密码技术---置换密码技术,以帮助学生对密码算法建立一个初步的认识和印象。置换密码:置换密码又称为换位密码,算法的原理是不改变、替换明文字符,只将字符在明文中的排列顺序改变,从而实现明文信息的加密。矩阵换位法是实现置换密码的一种常用方法(类似于教材中的双换位密码)。它将明文中的字母按照给定的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中字母,从而形成密文。例如,明文为attackbeginsatfive,密钥为cipher,将明文按照每行6列的形式排在矩阵中,形成如下形式:fattack'beginsatfive根据密钥cipher中各字母在字母表中出现的先后顺序,给定一个置换:[123456:145326>根据上面的置换,将原有矩阵中的字母按照第1列,第4列,第5列,第3列,第2列,第6列的顺序排列,则有下面形式:aacttkbingesaivfte从而得到密文:abatgftetcnvaiikse其解密的过程是根据密钥的字母数作为列数,将密文按照列,行的顺序写出,再根据由密钥给出的矩阵置换产生新的矩阵,从而恢复明文。四、实验环境、条件运行Windows操作系统的PC机,具有C语言、C++编译环境。五、实验组织运行要求根据本实验的特点、要求和具体条件,采用以学生自主训练为主的开放模式组织教学,每个学生按照实验指导书,独立完成实验。六、实验步骤根据实验原理部分对置换密码算法的介绍,自己创建明文信息,并选择一个密钥,编写置换密码算法的实现程序,实现加密和解密操作.七、实验报告本实验为古典密码学算法的验证类实验,需要按实验报告模板的表格填写,具体要求如下:(1)实验总结须反映实验步骤中的结果,并提供文字描述。(2)除教师评语外,实验报告表中的每项内容均由本实验的同学填写。(3)实验总结和实验自我评语,严禁雷同。(4)实验报告需要按实验报告模板的格式进行填写。实验三:DES加解密算法的实现(6学时)一、实验目的通过本实验的学习,使学生学会编程实现DES加解密算法,培养学生的编程能力和对DES算法的理解,深入理解对称加密算法和Feistel结构,为今后继续深入对称和非对称密码学的学习奠定基础。二、实验内容实现DES算法的加解密。三、实验原理、方法和手段DES(DataEncryptionStandard)算法,于1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法。DES算法以被应用于许多需要安全加密的场合。1.DES加密:
DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则见下表:58,50,12,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,即将输入的第58位换到第一位,第50位换到第2位,……,依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换,即得到密文输出。16轮的迭代:F函数如下:8个S盒:144IS1r1511s310d125g07II1574142N1III&12II>)5aK4114S13621115]2■?71]0501512S24gi751131410061,151s14113-49713-1205]031347152S141201106g1150147IIIC413-15S]269321513MIII1313+J.IIb712II314•)]00914iIS51B]2~1142SINJII1)34hIII2x3141211151]S649s153-cII12125]0:I471]00169S74IS143-II52127]31430691012S5II124IS]SSII5WIS□3472121]0149IIIfS9II121171315131+5£N+a1506in111s945II12714n41241■IIIIIkX5Jl>II1414111247]J150IS101gs64p1IIICia7s150]256a01411s1271:I4136150910453.TOC\o"1-5"\h\z]2I10]§§2680]1341475II101542712??6I13140113S9141553S12370410I13II6逆置换正好是初始置的逆运算,例如,第1位经过初始置换后3处于第40位而通III615w5'J0,俱48,16,56j24,64?32,39,7,47,15,55,23i而3,31,aIII615w5'J0,俱48,16,56j24,64?32,39,7,47,15,55,23i而3,31,arizz86;46节,54号2,62;3。,珥5,45,13,53,2垮1,29,:;食;93145II1275KIIII14U2hHlIS1535K.34,2,42,10,50,18,58^26,33,1,41,9,49,17,57,25,2.子密月的生成算法:EI阡;上子密钥Ki(48bit)的生成算法斗初始Ke#值为93145II1275KIIII14U2hHlIS1535K12346789101L1213L415161718192021222324252b272S29303132333435Jti37383940414243+4454647484950515253545558575S5960til6263t)4将56位分为C0、D0两部分,各28位,然后分别进行第1次循环左移,得到C1、D1,将C1(28位)、D1(28位)合并得到56位,再经过缩小选择换位2,从而便得到了密钥K0(48位)。依此类推,便可得到K1、K2、......、K16。置换选择1置换选择2需要注意的是,16次循环左移对应的左移位数要依据下述规则进行:循环左移位数1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1DES算法的解密过程是一样的,区别仅仅在于第一次迭代时用子密钥K16,第二次K14、……,最后一次用K1,算法本身并没有任何变化。四、实验环境、条件运行Windows操作系统的PC机,具有C语言、C++编译环境。五、实验组织运行要求根据本实验的特点、要求和具体条件,采用以学生自主训练为主的开放模式组织教学,每个学生按照实验指导书,独立完成实验。六、实验步骤利用编程语言实现DES加解密算法。1、编程:包含的功能函数有:staticvoidDES(charOut[8],charIn[8],constSUBKEY_Ppskey,boolType);/标准DES加/解密staticvoidSETKEY(constchar*Key,intlen);//设置密钥staticvoidSet_SubKey(SUBKEY_Ppskey,constcharKey[8]);//设置子密钥staticvoidF_FUNCTION(boolIn[32],constboolKi[48]);//f函数完成扩展置换、S-盒代替和P盒置换staticvoidS_BOXF(boolOut[32],constboolIn[48]);//S盒代替函数staticvoidTRANSFORM(bool*Out,bool*In,constchar*Table,intlen);//变换函数staticvoidXOR(bool*InA,constbool*InB,intlen);//异或函数staticvoidCYCLELEFT(bool*In,intlen,intloop);//循环左移函数staticvoidByteToBit(bool*Out,constchar*In,intbits);//字节组转换成位组函数staticvoidBitToByte(char*Out,constbool*In,intbits);//位组转换成字节组函数2、调试3、运行结果4、存盘参考程序:DES源程序///<summary>///DES加密///</summary>///<paramname="Data">被加密的明文</param>///<paramname="Key">^钥</param>///<paramname="Vector">^量</param>///<returns>密文</returns>publicstaticByte[]DESEncrypt(Byte[]Data,StringKey,StringVector){Byte[]bKey=newByte[8];bKey,Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)),bKey.Length);Byte[]bVector=newByte[8];bKey,Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)),bVector,bVector.Length);Byte[]Cryptograph=null;//加密后的密文DESCryptoServiceProviderEncryptProvider=newDESCryptoServiceProvider();EncryptProvider.Mode=CipherMode.CBC;EncryptProvider.Padding=PaddingMode.Zeros;try{//开辟一块内存流using(MemoryStreamMemory=newMemoryStream()){//把内存流对象包装成加密流对象using(CryptoStreamEncryptor=newCryptoStream(Memory,EncryptProvider.CreateEncryptor(bKey,bVector),CryptoStreamMode.Write)){//明文数据写入加密流Encryptor.Write(Data,0,Data.Length);Encryptor.FlushFinalBlock();Cryptograph=Memory.ToArray();}}}catch{Cryptograph=null;returnCryptograph;}///<summary>///DES解密///</summary>///<paramname="Data">被解密的密文</param>///<paramname="Key">^钥</param>///<paramname="Vector">^量</param>///<returns>明文</returns>publicstaticByte[]DESDecrypt(Byte[]Data,StringKey,StringVector){Byte[]bKey=newByte[8];Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)),bKey,bKey.Length);Byte[]bVector=newByte[8];Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)),bVector,bVector.Length);Byte[]original=null;DESCryptoServiceProviderCryptoProvider=newDESCryptoServiceProvider();CryptoProvider.Mode=CipherMode.CBC;CryptoProvider.Padding=PaddingMode.Zeros;try{//开辟一块内存流,存储密文using(MemoryStreamMemory=newMemoryStream(Data)){//把内存流对象包装成加密流对象using(CryptoStreamDecryptor=newCryptoStream(Memory,CryptoProvider.CreateDecryptor(bKey,bVector),CryptoStreamMode.Read)){//明文存储区using(MemoryStreamoriginalMemory=newMemoryStream()){Byte[]Buffer=newByte[1024];Int32readBytes=0;while((readBytes=Decryptor.Read(Buffer,0,Buffer.Length))>0){originalMemory.Write(Buffer,0,readBytes);}original=originalMemory.ToArray();}}}}catch{original=null;}returnoriginal;}实验结果加密:Key:0x300x300x300x30......0x30(8个字节)Data:0x310x310x310x310x31(8个字节)Mode:Encryption结果:655ea628cf62585f解密:Key:0x310x31......0x31(8个0x31)Data:655ea628cf62585fMode:Decryption结果:0x310x31......0x31(8个0x31)七、实验报告本实验为DES算法的验证类实验,需要按实验报告模板的表格填写,具体要求如下:实验总结须反映实验步骤中的结果,并提供文字描述。除教师评语外,实验报告表中的每项内容均由本实验的同学填写。实验总结和实验自我评语,严禁雷同。实验报告需要按实验报告模板的格式进行填写。实验四:RSA加解密算法的实现(4学时)一、实验目的通过本实验的学习,使学生掌握RSA加密算法的加解密过程,培养学生的编程能力和对算法的理解,加深对公钥密码算法的了解,为今后继续哈希函数的学习奠定基础。二、实验内容实现RSA加解密算法。三、实验原理、方法和手段RSA加密算法是一种非对称加密算法。在公钥加密标准和电子商业中RSA被广泛使用。RSA是1977年由罗纳德•李维斯特(RonRivest)、阿迪•萨莫尔、(AdiShamir)和伦纳德•阿德曼(LeonardAdleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。RSA算法的可靠性基于分解极大的整数是很困难的。假如有人找到一种很快的分解因子的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。1、公钥和私钥的产生假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息。她可以用以下的方式来产生一个公钥和一个密钥:随意选择两个大的质数p和q,p不等于q,计算N=pq。根据欧拉函数,不大于N且与N互质的整数个数为(p-1)(q-1)选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)用以下这个公式计算d:dxe三1(mod(p-1)(q-1))将p和q的记录销毁。e是公钥,d是私钥。d是秘密的,而N是公众都知道的。Alice将她的公钥传给Bob,而将她的私钥藏起来。2、加密消息假设Bob想给Alice送一个消息m,他知道Alice产生的N和e。用下面这个公式他可以将m加密为c:c=mAe(modn)计算c并不复杂。Bob算出c后就可以将它传递给Aliceo3、解密消息Alice得到Bob的消息c后就可以利用她的密钥d来解码。她可以用以下这个公式来将c转换为m:m=cAd(modn)她可以将原来的信息m重新复原。四、实验环境、条件运行Windows7操作系统的PC机,具有C语言、C++编译环境。五、实验组织运行要求根据本实验的特点、要求和具体条件,采用以学生自主训练为主的开放模式组织教学,每个学生按照实验指导书,独立完成实验。六、实验步骤1、求素数p和q2、求公钥(e,n):e与y(n)=(p—1)(q—1)互质3、求私钥(d,n):dxe三1(mod(p-1)(q-1))4、加密过程:c=(Me)modn5、解密过程:m=(Cd)modn实验方式:找两个素数:p=47q=59n=p*q=2773,t=(p-1)*(q-1)=2668寻找e满足evt并且e和t互素,找到e=63,寻找d使e*d%t==1得到d=8471:加密m=465,得C=11182:解密。=1118,得m=465参考程序:RSA源程序#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>#include<algorithm>usingnamespacestd;//存放素数intprime[1305];//用筛选法求素数intp[10005];voidPRIME(){inti,i2,k;for(i=0;i<=10000;i+=2)p[i]=0;for(i=1;i<=10000;i+=2)p[i]=1;p⑵=1;p[1]=0;for(i=3;i<=100;i+=2){if(p[i]==1){i2=i+i;k=i2+i;while(k<=10000){p[k]=0;k+=i2;}}}prime[0]=1;prime[1]=2;for(i=3;i<=10000;i+=2)if(p[i])prime[++prime[0]]=i;}//计算逆元素__int64mod(__int64a,__int64n){return(a%n+n)%n;}voidgcd(__int64a,__int64b,__int64&d,__int64&x,__int64&y){if(b==0){d=a;x=1;y=0;return;}gcd(b,a%b,d,y,x);y-=x*(a/b);}//a-1modn__int64Inv(__int64a,__int64n)//计算逆元素{
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国镍锌电池市场运行状况及发展前景分析报告
- 2025-2030年中国遮阳蓬市场运行动态及投资战略研究报告
- 2025江苏省建筑安全员A证考试题库
- 2025-2030年中国被褥行业市场运行状况及发展趋势分析报告
- 2025-2030年中国花露水行业运行状况与投资战略研究报告
- 2025-2030年中国腮红(胭脂)行业发展趋势与十三五规划分析报告
- 2025-2030年中国粗粮饮料产业需求状况及发展策略分析报告
- 2025-2030年中国稀土抛光粉市场发展趋势规划研究报告
- 2025-2030年中国真空镀膜机市场运行现状及投资规划研究报告
- 2025-2030年中国男士香水行业运行态势及发展前景分析报告
- 《植物学》练习(二)根、茎、叶营养器官的联系及变态
- 中暑-红十字应急救护培训课件
- 中国农业银行笔试真题
- (5.5)-杂草图片农田杂草及防除学
- 生理学人体生理功能的调节
- 大学英语精读1-6册课文
- 口腔护理技术
- 西师版四年级下册100道口算题大全(全册齐全)
- TFCC损伤的诊断及治疗
- 《西藏度亡经》及中阴解脱窍决(收藏)
- 2022年医学专题-健康危险因素干预
评论
0/150
提交评论