DES算法流程

初始置换IP

表格的使用方法: 将输入的64bit的明文从1开始标号,依次放入到IP初始置换表中数字对应的位置。填充完毕后,按照行优先的顺序从第1行开始依次读取获得输出。

16轮轮结构

整体结构

因为这16轮的操作都是一样的,所以这里我们只介绍第一轮的操作

  1. 将上一步经过初始置换IP后的64bit的结果平分为两部分(每部分32bit),分别记为L0R0

  2. R0进行一次F函数的变换并与L0进行异或,结果作为R1R0作为L1

    即:

    Li=Ri1

    Ri=Li1F(Ri1,Ki)

  3. 进行下一轮

F函数

F函数是对Ri进行操作这一前提条件之后不再重复

  1. E盒扩展

    同初始置换IP的步骤相同,按照顺序将输入的32bit依次放入对应的位置,仍按照行优先输出,输出结果为48bit

  2. E盒扩展结果与48bit的轮子密钥进行异或

  3. S盒代替压缩

    48bit分为8组,每组6bit,依次编号为B1,B2,...B8

    一共有8个S盒,依次编号为S1,S2,...S8

    Bi对应着使用Si

    考虑B1B1=b1b2b3b4b5b6,我们定义r=2b1+b6,c=23b2+22b3+2b4+b5(即将二进制转化为十进制),我们去S1盒中找到rc列对应的十进制数,将其转化为4位二进制即为结果

    参照B1的方法,依次转化完余下5组,最终得到32bit的输出

  4. p盒置换

    使用下表进行p盒置换,使用方法和IP初始置换相同

逆初始置换

16轮轮结构最后得到64位的输出,使用逆初始置换表将数据进行重新编排,使用方法同IP初始置换

子密钥生成

  1. 置换选择

置换选择PC-1输入64bit的原始密钥,输出56bit

若输入为56bit,则需要在8,16,24,32,40,48,56,64 bit处分别插入0,0,1,0,0,0,1,0 变为64bit

使用下表格进行置换选择PC-1,仍然是按照先后顺序将原始序列中的每一位填入下表,表格中缺少8的倍数,从而将输入的64bit变为输出的56bit,读取时仍为行优先。

  1. 循环移位

    将置换选择PC-1之后得到56bit的输出平分为两部分,各为28bit,即为C0, C1

    根据下标判断需要移动多少位

    所谓循环移位是指将C0, C1均看为一个循环的序列,左移1位将最左侧的一位移动到序列的尾部

    eg: 1 0 0 1 -> 0 0 1 1

posted @   0x7F  阅读(511)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示