DES加密算法实现

算法原理概述

概要

  • 输入64位
  • 初始置换IP
  • **调度实现16轮迭代T
  • 逆置换IP
  • 输出64位

初始置换

按照下面该表格进行初始的IP置换
DES加密算法实现

**调度实现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置换
DES加密算法实现


总体结构

  • 总体是按照面向过程来进行编程的
  • 按照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数组,当涉及到置换时,将一维数组转化成二维数组,在进行转换

C语言代码

代码下载链接


编译运行结果

DES加密算法实现