实验一DES加密解密.doc

上传人:夏** 文档编号:554986574 上传时间:2023-12-01 格式:DOC 页数:4 大小:35KB
返回 下载 相关 举报
实验一DES加密解密.doc_第1页
第1页 / 共4页
实验一DES加密解密.doc_第2页
第2页 / 共4页
实验一DES加密解密.doc_第3页
第3页 / 共4页
实验一DES加密解密.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《实验一DES加密解密.doc》由会员分享,可在线阅读,更多相关《实验一DES加密解密.doc(4页珍藏版)》请在金锄头文库上搜索。

1、实验一 DES加密解密实验目的1、理解对称加密算法的原理和特点。2、理解DES和AES算法的加密原理。实验原理DES是一种分组加密算法,所谓分组加密算法就是对一定大小的明文或密文来做加密或解密动作。而在DES这个加密系统中,每次加密或解密的分组大小均为64位,所以DES没有密文扩充的问题。对大于64位的明文只要按每64位一组进行切割,而对小于64位的明文只要在后面补“0”即可。另一方面,DES所用的加密或解密密钥也是64位大小,但因其中有8个位是用来作奇偶校验的,所以64位中真正起密钥作用的只有56位,密钥过短也是DES最大的缺点。DES加密与解密所用的算法除了子密钥的顺序不同外,其他部分完全

2、相同。核心代码#include #include #include #define ENCRYPT 1#define DECRYPT 0static void printHex( char *cmd, int len );static void printArray( const char *In, int len );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

3、, 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); / 位组转换成字节组/

4、 16位子密钥static bool SubKey1648;/ 64位经过PC1转换为56位 (PC-1)const static char PC1_Table56 =;/ 左移const static char LOOP_Table16 =;/ 排列选择 2 (PC-2)const static char PC2_Table48 =;/ Ri_1(32位)经过变换E后膨胀为48位 (E) void F_funcstatic const char E_Table48 =;/ 8个4比特合并为32比特的排列 Pconst static char P_Table32 =;/ 经过S盒 S-boxe

5、sconst static char S_Box8416 =;/ 初始排列 (IP)const static char IP_Table64 =;/ L16与R16合并后经过IP_1的最终排列 (IP*-1)const static char IPR_Table64 =;void Des_SetKey(const char Key8); /生成子密钥void Des_Run(char Out8, char In8, bool Type); /DES算法 void main(int argc, char *argv)char key12=1,2,3,4,5,6,7,8;char str12=He

6、llo;char str212;/printArray( PC2_Table, sizeof(PC2_Table)/sizeof(PC2_Table0) );printf(Before encrypting: );puts(str);Des_SetKey(key);memset(str2, 0, sizeof(str2);Des_Run(str2, str, ENCRYPT);printf(After encrypting: );printHex( str2, 8 );memset(str, 0, sizeof(str);printf(After decrypting: );Des_Run(s

7、tr, str2, DECRYPT);puts(str);实验分析DES采用传统的换位和置换的方法进行加密,在56b密钥的控制下,将64b明文块变换为64b密文块,加密过程包括16轮的加密迭代,每轮都采用一种乘积密码方式(代替和移位)。实验总结与心得体会这个实验要充分了解其原理,才是做这个实验的真正目的,在这个实验中,我觉得比较难的就是,要将明文和密钥经过初始变换和十六轮加密变换等一系列变换后才能得到张结置换,其中的变换步骤比较多,而且比较复杂,还要将十六进制转化为二进制,工作量比较大。由本次DES算法实验我们可以看到:DES算法中只用到64位密钥中的其中56位,而第8、16、24、.64位8个位并未参与DES运算,这一点,向我们提出了一个应用上的要求,即DES的安全性是基于除了8,16,24,.64位外的其余56位的组合变化256才得以保证的。因此,在实际应用中,我们应避开使用第8,16, 24,.64位作为有效数据位,而使用其它的56位作为有效数据位,才能保证DES算法安全可靠地发挥作用。如果不了解这一点,把密钥Key的 8,16,24,. 64位作为有效数据使用,将不能保证DES加密数据的安全性,对运用DES来达到保密作用的系统产生数据被破译的危险,这正是DES算法在应用上的误区,留下了被人攻击、被人破译的极大隐患。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号