DES加密算法实现 - Go语言中文社区

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数组,当涉及到置换时,将一维数组转化成二维数组,在进行转换

C语言代码

代码下载链接


编译运行结果

在这里插入图片描述


版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_36312878/article/details/83752249
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢