实验内容:基于3DE加解密算法,编程实现对任意文件实现加解密的软件。
一、编程实现DES加密和解密算法,并使用DES加解密算法实现3DES加解密算法。
二、选择一种填充方式,对需要加密的文件进行填充(解密要去掉填充部分),可以选择的填充方法参考https://www.jianshu.com/p/16e1cbc0b7a9
三、DES的加解密的工作模式,采用密码分组链接(CBC)模式
四、读取/写入被加密/解密文件时,采用字节流的形式进行文件读取/写入(字节流的查看,可以使用UltraEdit的十六进制查看模式,一款功能强大实用的专业文本编辑器,可以轻松的查看十六进制)
完成实验后,需要提交实验报告(包括:重要函数的功能分析和流程图)
1、DES算法的入口参数有三个: Key、Data、Mode。
其中Key为8个字节共64位,是DES算法的工作密钥;
Data也为8个字节64位,是要被加密或被解密的数据;
Mode为DES的工作方式,有两种:加密或解密。
2、DES算法过程:
如果mode为加密,则用Key 去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果;
如果mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。
3、DES算法步骤
DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位(实际用到了56位,第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1),其算法主要分为两步:
①初始置换
其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则为将输入的第58位换到第一位,第50位换到第2位……依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,例:设置换前的输入值为D1D2D3……D64,则经过初始置换后的结果为: L0=D58D50……D8;R0=D57D49……D7。
其置换规则见下表:
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
②逆置换
经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出。
此算法是对称加密算法体系中的代表,在计算机网络系统中广泛使用。
4、DES算法实现
见 "三、算法实现"
二、3DES算法
3DES(又称Triple DES),是进行了三重数据加密,即:每个数据块进行了三次DES加密算法,使用3条64位的密钥对数据进行三次加密,故比DES加密更为安全,更难破解。
1、加密算法,其具体实现如下:
设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,M代表明文,C代表密文:
3DES加密过程为:C=Ek3(Dk2(Ek1(M)))
3DES解密过程为:M=Dk1(EK2(Dk3(C)))
注:K1、K2、K3决定了算法的安全性,若三个密钥互不相同,本质上就相当于用一个长为168位的密钥进行加密。多年来,它在对付强力攻击时是比较安全的。若数据对安全性要求不那么高,K1可以等于K3。在这种情况下,密钥的有效长度为112位。
已经实现将十六进制转为二进制。
输入为16位的十六进制表示的密钥和明文,输出16位的十六进制表示的密文。
明天实验课的任务:
将二进制再转为十六进制?或者是将字节流直接转为十六进制?(先解决这个问题,输入输出的问题,再研究重要和函数及其画出流程图)
参考下面的例子:
DES与3DES 加解密实例(c++)_武倔的博客-优快云博客
老师给的例子:DES与3DES 加解密实例(c++)_武倔的博客-优快云博客_des加密mp3
64位的二进制,表格中用十六进制表示。
私钥 | 明文 | 密文 |
0000000000000000 | 0000000000000000 | 8CA64DE9C1B123A7 |