欢迎来到天天文库
浏览记录
ID:45101184
大小:130.00 KB
页数:22页
时间:2019-11-09
《《计算机与网络安全》课程实验实验一 DES加解密算法的实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《计算机与网络安全》课程实验2016年月6月实验一DES加解密算法的实现一、实验目的及任务:掌握DES加密算法的加解密过程。二、实验环境VC或TC编程环境;主机操作系统为Windows2000或WindowsXP;三、实验原理要深入理解对称加密算法,掌握DES加密过程。具备一定的C语言编程技能。DES(DataDES(DataEncryptionStandard)算法,于1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法。DES算法以被应用于许多需要安全加密的场合。(一)、密钥生成1、变换密钥取得64位的密钥,每个第8位作为奇偶校验位。2、变换密钥。(
2、1)、舍弃64位密钥中的奇偶校验位,根据下表(PC-1)进行密钥变换得到56位的密钥,在变换中,奇偶校验位以被舍弃。(2)、将变换后的密钥分为两个部分,开始的28位称为C[0],最后的28位称为D[0]。(3)生成16个子密钥,初始I=1。(i)、同时将C[I]、D[I]左移1位或2位,根据I值决定左移的位数。(ii)、将C[I]D[I]作为一个整体按下表(PC-2)变换,得到48位的K[I](iii)、从1-2-3-1处循环执行,直到K[16]被计算完成。(二)、处理64位的数据1、取得64位的数据,如果数据长度不足64位,应该将其扩展为64位(例如补零)2、将64位数据按
3、下表变换(IP)3、将变换后的数据分为两部分,开始的32位称为L[0],最后的32位称为R[0]。4、用16个子密钥加密数据,初始I=1。(1)、将32位的R[I-1]按下表(E)扩展为48位的E[I-1](2)、异或E[I-1]和K[I],即E[I-1]XORK[I](3)、将异或后的结果分为8个6位长的部分,第1位到第6位称为B[1],第7位到第12位称为B[2],依此类推,第43位到第48位称为B[8]。(4)、按S表变换所有的B[J],初始J=1。所有在S表的值都被当作4位长度处理。(i)将B[J]的第1位和第6位组合为一个2位长度的变量M,M作为在S[J]中的行号。
4、(ii)、将B[J]的第2位到第5位组合,作为一个4位长度的变量N,N作为在S[J]中的列号。(iii)、用S[J][M][N]来取代B[J]。(iv)、从(i)处循环执行,直到B[8]被替代完成。(5)、将B[1]到B[8]组合,按下表(P)变换,得到P。(6)、异或P和L[I-1]结果放在R[I],即R[I]=PXORL[I-1]。(7)、L[I]=R[I-1](8)、从2-4-1处开始循环执行,直到K[16]被变换完成。5、、组合变换后的R[16]L[16](注意:R作为开始的32位),按下表(IP-1)变换得到最后的结果。四、实验步骤利用编程语言实现DES加解密算法。
5、1、编程2、调试3、运行结果4、存盘五、实验结果加密:Key:0x300x300x300x30......0x30(8个字节)Data:0x310x310x310x31......0x31(8个字节)Mode:Encryption结果:655ea628cf62585f解密:Key:0x310x31......0x31(8个0x31)Data:655ea628cf62585fMode:Decryption结果:0x310x31......0x31(8个0x31)六、实验思考题DES算法主要有哪几部分?可以画出流程64位密钥64位明文置换选择初始置换循环左移置换选择16轮加密32
6、位互换逆初始置换一轮迭代过程:28位28位32位32位左移左移扩展/置换XOR置换/压缩代替/选择置换D1C132位32位七、DES源程序#include"memory.h"#include"stdio.h"#includeusingnamespacestd;enum{encrypt,decrypt};//ENCRYPT:加密,DECRYPT:解密voiddes_run(intout[8],intin[8],booltype=encrypt);//设置密钥voiddes_setkey(constintkey[8]);staticvoidf_func(boo
7、lin[32],constboolki[48]);//f函数staticvoids_func(boolout[32],constboolin[48]);//s盒代替//变换staticvoidtransform(bool*out,bool*in,constint*table,intlen);staticvoidtrans(bool*out,bool*in);staticvoidXOR(bool*ina,constbool*inb,intlen);//异或staticvoidrotatel(bool*in
此文档下载收益归作者所有