信息安全实验指导书吕林涛.doc_第1页
信息安全实验指导书吕林涛.doc_第2页
信息安全实验指导书吕林涛.doc_第3页
信息安全实验指导书吕林涛.doc_第4页
信息安全实验指导书吕林涛.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

信息安全实验指导书编者:吕林涛 胡元义 王义铭 吴孟斌西安理工大学计算机科学与工程学院2011年信息安全课程实验指导书一、制定实验指导书的依据根据本校2008级本科指导性培养计划、信息安全课程教学大纲、信息安全课程实验大纲制定。二、本课程实验目的与要求1. 本课程实验目的信息安全课程在计算机专业教学计划中,是一门重要的专业技术课。信息安全人才需求在我国紧缺,国内能开设信息安全课程的高校为数不多。因此信息安全实验课程能使学生获得网络安全、密码技术基础、密钥管理技术、数字签名和认证技术、网络入侵检测原理与技术、Internet的基础设施安全、防火墙技术、电子商务的安全技术及应用、包过滤技术原理及应用、代理服务技术原理及应用、信息隐藏技术等方面的知识。实验课是本课程重要的教学环节,其目的是使学生掌握使学生能够对计算机网络网络与信息安全有一个系统的了解,并掌握计算机网络特别是计算机网络网络与信息安全的基本理论和关键技术,掌握设计和维护网络与信息安全的网络体系及其应用系统的基本手段和常用方法接受基本实验技能的训练,提高学生的动手能力和分析、解决问题的能力。总之,本实验目的是:(1) 了解和掌握加密/解密和数字签名模型构建方法;(2) 在掌握用Outlook Express发送签名邮件的方法和掌握用Outlook Express发送加密邮件的方法的基础上, 掌握常用的加密/解密和数字签名算法原理及应用。2. 本课程实验要求学生预备的知识由于越来越多的人通过电子邮件发送机密信息,因此,确保电子邮件中发送的文档不是伪造的变得日趋重要。同时,保证所发送的邮件不被除收件人以外的其他人截取和偷阅也同样重要。通过使用Outlook Express的“数字标识”,您可以在电子事务中证明您的身份,就像兑付支票时要出示有效证件一样。您也可以使用数字标识来加密邮件以保护个人隐私。数字标识结合了S/MIME规范来确保电子邮件的安全。由于Internet电子商务系统技术使在网上购物的顾客能够及其方便轻松地获得商家和企业的信息,但同时也增加了对某些敏感或有价值的数据被盗用的风险。买方和卖方都必须保证在因特网上进行的一切金融交易运作都是真实可靠的,并且要使顾客、商家和企业等交易各方都具有绝对的信心,因而,因特网电子商务系统必须保证具有十分可靠的安全保密技术,也就是说,必须保证网络安全的四大要素,即信息传输的保密性、交易者身份的确定性、发送信息的不可否认性、数据交换的完整性。()信息传输的保密性。交易中的商务信息均有保密的要求,如信用卡的帐号和用户名被人知悉,就可能被盗用;订货和付款的信息被竞争对手获悉,就可能丧失商机。因此,在电子商务的信息传播中,一般均有加密的要求。()交易者身份的确定性。网上交易的双方很可能素昧平生,相隔千里。要使交易成功,首先要能确认对方的身份,商家要考虑客户端是不是骗子,而客户也会担心网上的商店不是一个玩弄欺诈的黑店。因此,能方便可靠地确认对方身份是交易的前提。对于为顾客或用户开展服务的银行、信用卡公司和销售商店来说,为了做到安全、保密、可靠地开展服务活动,都要进行身份认证的工作。对有关的销售商店来说,他们对顾客所用的信用卡的号码是不知道的,商店只能把信用卡的确认工作完全交给银行来完成。银行和信用卡公司可以采用各种保密与识别方法,确认顾客的身份是否合法,同时,还要防止 发生拒付款问题以及确认订货和订货收据信息等。(3)发送信息的不可否认性。由于商情的千变万化,交易一旦达成是不能被否认的。否则必然会损害一方的利益。例如订购黄金,订货时金价较低,但收到订单后,金价上涨了,如收单方否认收到订单的实际时间 ,甚至否认收到订单的事实,则订货方就会蒙受损失。因此,电子交易通信过程的各个环节都必须是不可否认的。 (4)数据交换的完整性。交易的文件是不可被修改的,如上述订购黄金,供货单位在收到订单后,发现金价大幅上涨了,如其能改动文件内容,将价格提高,则可大幅收益,而订货单位就会因此而蒙受损失。数字安全证书提供了一种在网上验证身份的方式。安全证书体制主要采用了公开密钥体制,其他还包括对称密钥加密、数字签名、数字信封等技术。我们可以使用数字证书,通过运用对称和非对称密码体制等密码技术建立起一套严密的身份认证系统,从而保证:信息在传输过程中不被篡改;双方能够通过数字证书来确认对方的身份;发送方对于自己的信息不能抵赖。3.本课程实验的内容及要求3.1 本课程实验的内容(1)熟悉数据加密/解密方法(任选下面一个实验题目):1)熟悉Outlook Express 发送签名邮件方法和发送加密邮件方法;2)RSA算法实现;3)DES算法实现。(2)置换密码技术实现程序开发3.2本课程实验要求3.2.1 实验1:熟悉Outlook Express发送签名邮件方法和发送加密邮件方法;通过熟悉Outlook Express发送签名邮件的方法和Outlook Express发送加密邮件的方法的基础上, 掌握本课程实验的内容的加密/解密和数字签名算法原理及应用。(一) OutLook Express发送签名邮件方法(1)发送签名邮件前必须正确安装了自己的“电子邮件保护证书”。如果要申请或者导入证书请到站点上申请一个电子邮件保护证书。(2)启动OutLook Express,从“工具”菜单中选择“帐号”。如果还没添加过帐号,请参阅其他章内容,添加一个自己的邮件地址帐号,如图3-1所示。图3-1(3)选择帐号,单击右边“属性”按钮,弹出“属性”对话框,选择“安全”标签,出现如图3-2所示对话框。图3-2(4)单击签署证书中的“选择”按钮,弹出你所申请的“电子邮件安全证书”选择对话框,如图3-3所示。图3-3(5)选择所申请的安全电子邮件证书,单击“确定”按钮。(6)单击“确定”,关闭Outlook Express帐户窗口,返回到Outlook Express界面,单击“创建邮件”,从“工具”菜单中选择“签名”,收件人地址栏后面出现“签名”标志,如图3-4所示。图3-4(7)输入对方邮件地址及其他内容,单击“发送“就可以发送数字签名电子邮件了。(8)用上面的方法给自己发一封带有自己数字签名的电子邮件,然后用Outlook Express接受,接受到的电子邮件就会出现在右边的列表中。(9)双击所接收到的带数字签名的电子邮件。(10)单击窗口中的数字签名标识,会弹出一个以你所接受到邮件主题命名的窗口,可以看到所接受到的邮件的详细安全信息,包括证书信息、常规信息等。(二) Outlook Express发送加密邮件方法(1)发送加密邮件前必须正确安装了对方的“电子邮件保护证书”(只含有共有密钥,可以向对方索取)。向对方索取后,再正确的安装。(2)单击Outlook Express “工具”菜单中选择“选项”,弹出“选项”对话框,选择“安全”标签,如图3-5所示。图3-5(3)单击“数字标识”按钮,弹出“证书”,选项窗口,单击“其他人”标签,如图3-6所示。图3-6(4)单击“导入”按钮, 通过浏览方式选择对方数字证书,如图3-7所示。图3-7(5)单击“下一步”按钮,选择“将所有的证书放入下列存储区”,单击“浏览”按钮, 选择“其他人”。(6)单击“下一步”按钮,安装对方数字证书。(7)单击“关闭”,再单击“确定”,返回到Outlook Express主界面,创建新邮件,从“工具”菜单中选择“加密”,收件人地址栏后面出现“加密”标志。(8)输入对方邮件地址及其他相关内容,就可以发送邮件了。(9)用上面的方法给自己发一封加密电子邮件,然后用Outlook Express接收,接收到的电子邮件就会显示出来。(10)双击所接收到的加密电子邮件,会弹出加密提示。(11)单击“确定”,就可以看到所收到的加密邮件了。(12)单击“继续”就可以看到邮件正文了,同样,单击窗口右边的加密标识,会弹出一个“加密邮件”窗口,可以看到你所接收到的邮件的详细安全信息,包括证书信息、常规信息和加密信息等。(三)报告要求:本次实验不提交实验报告。(四)思考题:1. Outlook Express的基本功能是什么?2. Outlook Express中的证书内容是什么?(五)参考文献:1吕林涛,李军怀.网络信息安全技术概论(第二版).北京:科学出版社,2010.62吕林涛等.网络与信息安全实验指导书.校编,20113梁亚声等.计算机网络安全技术教程.北京:机械工业出版社,200 实验2:RSA算法实现1实验题目:RSA 加密算法的实现2实验目的 通过RSA加密算法的实现,进一步掌握RSA算法的原理,为今后的工程应用打下坚实的基础。3实验原理 (1)找出三个数p,q,r.其中p,q是两个相异的质数,r是与(p-1)(q-1)互质的数,p,q,r这三个数便是私钥;(2)找到m,使得rm=1 mod (p-1)(q-1),这个m一定存在,因为r与(p-1)(q-1)互质,用辗转相除法就可以得到;(3)计算n=pq (其中: m,n这两个数便是公钥)。 加密过程是,(1)若待加密的明文信息流定义为a,并将其看成是一个大整数,如果a=n的话,就将a表乘s进位(s=n,通常取s=2t,则每位数均小于n; (2)分段加密;(3)计算c=am mod n (0=bn),b是加密后的密文信息流。 解密过程是,计算c=br mod (pq) (0=c 实验心得必须针对本实验写出自己的认识,本算法的优缺点等等。4实验必须独立完成,实验报告不能雷同,否则按零分计。7实验程序及实验数据:(1)实验程序 #include #include #include Int getd(int p, int q,int e) Int qn,d=1; qn=(p-1)*(q-1); while(d) If(d*e%qn=1) Return(d);Else d+;/getdInt power(int a,intb) Int mut=1; While(b!=0) Mut*=a; b-;Return mut;/powerInt jiemi(int e,int n,int p) Int q; q=power(p,e)%n; return q;/jiemiInt jiami(int e,int n,int p) Int q; q=power(p,e)%n; return q;/jiami Void main() Int prime1,prime2,p; Int d,e,n,miwen,minwen; Int getd(int p,int q,int e); Printf(“请输入两个大的素数和公钥,en”); Scanf(“%d%d%d”,&prime1,&prime2,&e); n=prime1*prime2; printf(“n为%dn”,n); d=getd(prime1,prime2,e); printf(“私有密钥是%d”,d);/其中e和n为共钥,d为私钥 printf(“请输入要加密的数字串n”); scanf(“%d”,&p); while(p!=0) miwen=jiami(e,n,p); printf(“加密的数值是%d”,miwen); minwen=jiemi(d,n,miwen);printf(“解密后的数值为; %dn”,minwen); scanf(“%d”,&p);(2)实验输入数据 P=43, q=59 e=13 n=2537 d=937 =(e=13,n=2537)为公钥,(d=937)为私钥取明文public encryptions, 将明文按两个一组进行分块,再将明文数字化 pu=1520 bl=0111 ic=0802 ke=1004 ye=2404 nc=1302 ry=1724 pt=1519 io=0814 ns=1318(3)实验输出数据 pu=0095 bl=1648 ic=1410 ke=1299 ye=1365 nc=1379 ry=2333 pt=2132 io=1751 ns=13248思考题(1)1RSA加密算法除了文件加密还可用在哪些场合?(2)简述RSA加密算法的优缺点?(3)跟其他几种加密算法比较RSA加密算法速度如何?9参考文献1梁亚声等.计算机网络安全技术教程.北京:机械工业出版社,2005.22周明全,吕林涛,李军怀.网络网络与信息安全技术.西安:西安电子科技大学出版社,20043吕林涛等.网络与信息安全实验指导书.校编,20063.2.3 实验3:DES 算法实现 1实验题目:DES 算法实现2实验目的 通过DES加密算法的实现,进一步掌握DES算法的原理,了解DES算法在现实社会中的用途以及重要性,为今后的工程应用打下坚实的基础。3实验原理DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。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位,例:设置换前的输入值为D1D2D3.D64,则经过初始置换后的结果为:L0=D58D50.D8;R0=D57D49.D7。经过16次迭代运算后。得到L16、R16,将此作为输入,进行逆置换,即得到密文输出。逆置换正好是初始置的逆运算,例如,第1位经过初始置换后,处于第40位,而通过逆置换,又将第40位换回到第1位,其逆置换规则如下表所示:40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58 26,33,1,41, 9,49,17,57,25,放大换位表32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10,11,12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32, 1,单纯换位表16,7,20,21,29,12,28,17, 1,15,23,26, 5,18,31,10,2,8,24,14,32,27, 3, 9,19,13,30, 6,22,11, 4,25,在f(Ri,Ki)算法描述图中,S1,S2.S8为选择函数,其功能是把6bit数据变为4bit数据。下面给出选择函数Si(i=1,2.8)的功能表:选择函数SiS1:14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,S2:15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,S3:10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,S4:7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,S5:2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3,S6:12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,S7:4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12,S8:13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11,在此以S1为例说明其功能,我们可以看到:在S1中,共有4行数据,命名为0,1、2、3行;每行有16列,命名为0、1、2、3,.,14、15列。现设输入为: DD1D2D3D4D5D6令:列D2D3D4D5行D1D6然后在S1表中查得对应的数,以4位二进制表示,此即为选择函数S1的输出。下面给出子密钥Ki(48bit)的生成算法从子密钥Ki的生成算法描述图中我们可以看到:初始Key值为64位,但DES算法规定,其中第8、16、.64位是奇偶校验位,不参与DES运算。故Key 实际可用位数便只有56位。即:经过缩小选择换位表1的变换后,Key 的位数由64 位变成了56位,此56位分为C0、D0两部分,各28位,然后分别进行第1次循环左移,得到C1、D1,将C1(28位)、D1(28位)合并得到56位,再经过缩小选择换位2,从而便得到了密钥K0(48位)。依此类推,便可得到K1、K2、.、K15,不过需要注意的是,16次循环左移对应的左移位数要依据下述规则进行:循环左移位数1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1以上介绍了DES算法的加密过程。DES算法的解密过程是一样的,区别仅仅在于第一次迭代时用子密钥K15,第二次K14、.,最后一次用K0,算法本身并没有任何变化。 4实验环境运行windows操作系统的PC机,具有VC、C、VB等语言编译环境。5实验内容(1)准备实验加密数据文件;(2)构造IP和IP-1、S-盒、P-盒和F函数模型,确定密钥K等参数;(3)通过实验程序验证DES算法(4)分析实验结果;(5)撰写实验报告。6实验报告要求1要求上述密码算法最后的实现程序提供加密和解密两个接口,要求由数据测试。2程序部分必须加注释,增强可读性;使用结构化编程模式。3 实验心得必须针对本实验写出自己的认识,本算法的优缺点等等。4实验必须独立完成,实验报告不能雷同,否则按零分计。7实验程序:Des.h文件:/enum ENCRYPT,DECRYPT;/enum boolfalse,true; / if bool is not supported,use this or just replace with char / and use 1 for true,0 for false;/ TypeENCRYPT:加密,DECRYPT:解密/ 输出缓冲区(Out)的长度 = (datalen+7)/8)*8,即比datalen大的且是8的倍数的最小正整数/ In 可以= Out,此时加/解密后将覆盖输入缓冲区(In)的内容/ 当keylen8时系统自动使用3次DES加/解密,否则使用标准DES加/解密.超过16字节后只取前16字节bool Des_Go(char *Out,char *In,long datalen,const char *Key,int keylen,bool Type = ENCRYPT);/DES.cpp文件:#include memory.h#include WjcDes.h/ initial permutation IPconst static char IP_Table64 = 58, 50, 42, 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;/ final permutation IP-1 const static char IPR_Table64 = 40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31,38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27,34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25;/ expansion operation matrixstatic const char E_Table48 = 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17,16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25,24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1;/ 32-bit permutation function P used on the output of the S-boxes const static char P_Table32 = 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10,2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25;/ permuted choice table (key) const static char PC1_Table56 = 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18,10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36,63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22,14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4;/ permuted choice key (table) const static char PC2_Table48 = 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10,23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2,41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48,44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32;/ number left rotations of pc1 const static char LOOP_Table16 = 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1;/ The (in)famous S-boxes const static char S_Box8416 = / S1 14, 4,13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13,/ S2 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9,/ S3 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12,/ S4 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14,/ S5 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3,/ S6 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13,/ S7 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12,/ S8 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11;/typedef bool (*PSubKey)1648;/static void DES(char Out8, char In8, const PSubKey pSubKey, bool Type);/标准DES加/解密static void SetKey(const char* Key, int len);/ 设置密钥static void SetSubKey(PSubKey pSubKey, const char Key8);/ 设置子密钥static void F_func(bool In32, const bool Ki48);/ f 函数static void S_func(bool Out32, const bool In48);/ S 盒代替static void Transform(bool *Out, bool *In, const char *Table, int len);/ 变换static void Xor(bool *InA, const bool *InB, int len);/ 异或static void RotateL(bool *In, int len, int loop);/ 循环左移static void ByteToBit(bool *Out, const char *In, int bits);/ 字节组转换成位组static void BitToByte(char *Out, const bool *In, int bits);/ 位组转换成字节组/static bool SubKey21648;/ 16圈子密钥static bool Is3DES;/ 3次DES标志static char Tmp256, deskey16;/ Code starts from Line 130/bool Des_Go(char *Out, char *In, long datalen, const char *Key, int keylen, bool Type) if( !( Out & In & Key & (datalen=(datalen+7)&0xfffffff8) ) ) return false;SetKey(Key, keylen);if( !Is3DES ) / 1次DESfor(long i=0,j=datalen3; i3; i16?16:len);SetSubKey(&SubKey0, &deskey0);Is3DES = len8 ? (SetSubKey(&SubKey1, &deskey8), true) : false;void DES(char Out8, char In8, const PSubKey pSubKey, bool Type) static bool M64, tmp32, *Li=&M0, *Ri=&M32; ByteToBit(M, In, 64); Transform(M, M, IP_Table, 64); if( Type = ENCRYPT ) for(int i=0; i=0; -i) memcpy(tmp, Li, 32); F_func(Li, (*pSubKey)i); Xor(Li, Ri, 32); memcpy(Ri, tmp,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论