DES加密算法实现
算法原理概述
概要
- 输入64位
- 初始置换IP
- **调度实现16轮迭代T
- 逆置换IP
- 输出64位
初始置换
按照下面该表格进行初始的IP置换
**调度实现16轮迭代T
- 保留上次迭代后32位作为本次的前32位
- 将上次迭代结果的后32位进行feistel转换
- 将长度为32位的串 Ri-1作 E-扩展,成为48位的串 E(Ri-1);
- 将 E(Ri-1) 和长度为48位的子** Ki 作48位二进制串按位异或运
算,Ki 由** K 生成; - 将 (2) 得到的结果平均分成8个分组 (每个分组长度6位),各个分
组分别经过8个不同的 S-盒进行 6-4 转换,得到8个长度分别为4
位的分组; - 将 (3) 得到的分组结果顺序连接得到长度为32位的串;
- 将 (4) 的结果经过 P-置换,得到的结果作为轮函数 f(Ri-1, Ki) 的最终32位输出。
- 将上一操作的结果于上次迭代结果的前32位进行异或操作
- 最后将左右交换进行输出
逆置换IP
按照下面该表格进行逆的IP置换
总体结构
- 总体是按照面向过程来进行编程的
- 按照PPT的流程划分,将整个过程划分为:
- IP置换
- 16轮的迭代
- IP的逆置换
- 在进行des算法前后分别输出messag跟password
- 通过input.txt的内容进行输入
模块分解
- Main:主函数,用于输入明文以及**,以及输出结果
- Des:des算法的总函数,调用其他的处理函数
- IPset:IP置换,包括初始置换和逆置换;传入的参数1为初始置换,传入的参数0为逆置换
- iterate:迭代的总函数,进行16轮的迭代
- createSubkey:根据迭代的次数处理56位子**(移位以及进行PC2置换)
- right_extend:进行右边的拓展,将32位拓展为48位
- PC_set:对**进行PC置换,成56位的子**
- leftMove:将56位的子**进行左移一位
- xor:将48位的处理后的明文跟48位的子**进行异或
- s_box:进行s_box选择,将48位的密文重新选择回32位
- p_set:将s_box的32位的密文进行p_set
- print:输出函数
数据结构
- 一维的char数组,主要用来存储初始明文及**
- 二维的char数组,当涉及到置换时,将一维数组转化成二维数组,在进行转换