DES算法流程
初始置换IP
表格的使用方法: 将输入的64bit的明文从1开始标号,依次放入到IP初始置换表中数字对应的位置。填充完毕后,按照行优先的顺序从第1行开始依次读取获得输出。
16轮轮结构
整体结构
因为这16轮的操作都是一样的,所以这里我们只介绍第一轮的操作
-
将上一步经过初始置换IP后的64bit的结果平分为两部分(每部分32bit),分别记为 和
-
对进行一次F函数的变换并与进行异或,结果作为,作为
即:
-
进行下一轮
F函数
F函数是对进行操作这一前提条件之后不再重复
-
E盒扩展
同初始置换IP的步骤相同,按照顺序将输入的依次放入对应的位置,仍按照行优先输出,输出结果为
-
E盒扩展结果与48bit的轮子密钥进行异或
-
S盒代替压缩
将分为组,每组,依次编号为
一共有个S盒,依次编号为
对应着使用
考虑,,我们定义(即将二进制转化为十进制),我们去盒中找到行列对应的十进制数,将其转化为4位二进制即为结果
参照的方法,依次转化完余下组,最终得到的输出
-
p盒置换
使用下表进行p盒置换,使用方法和IP初始置换相同
逆初始置换
16轮轮结构最后得到64位的输出,使用逆初始置换表将数据进行重新编排,使用方法同IP初始置换
子密钥生成
- 置换选择
置换选择PC-1输入64bit的原始密钥,输出56bit
若输入为56bit,则需要在 bit处分别插入 变为64bit
使用下表格进行置换选择PC-1,仍然是按照先后顺序将原始序列中的每一位填入下表,表格中缺少8的倍数,从而将输入的64bit变为输出的56bit,读取时仍为行优先。
-
循环移位
将置换选择PC-1之后得到56bit的输出平分为两部分,各为28bit,即为,
根据下标判断需要移动多少位
所谓循环移位是指将, 均看为一个循环的序列,左移1位将最左侧的一位移动到序列的尾部
eg: 1 0 0 1 -> 0 0 1 1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理