DES算法详解
时间:2021/12/20
一.DES算法加密流程#
1.加密流程图#
如上图所示,DES的明文和密文都以64bit为一个分组,加解密使用同一个算法,只是密钥的使用顺序是相反的,密钥长度为56bit,一共有16轮。
2.加密过程的公式化描述#
对于加密过程的每一轮,上一轮的右边保持不变成为下一轮的左边,上一轮的右边和轮密钥作为轮函数的输入,轮函数的输出和上一轮的左边异或后作为下一轮的右边。(注意这里的上一轮指的是下标位i-1的一轮,下一轮指的是下标位i的一轮)
3.子密钥生成算法#
子密钥生成:开始的64bit密钥是实际的56bit密钥+8bit奇偶校验位,置换选择1是先去掉了8bit奇偶校验位,然后将剩下的56bit密钥按照置换表的位置重新进行排列。在完成置换选择1后,将56bit密钥分成左右各28bit,然后左右分别循环左移,需要注意不同轮数需要的移位位数是不同的(有一个表格),需要注意的是左右两边是分开进行循环移位的。然后合并左右两边,去掉固定位置的比特,然后根据置换选择2的表格重新进行排列,排列后就可以得到该轮48bit的轮密钥。
4.轮函数(F函数)的实现过程#
上图是F函数内部的过程。
5.选择扩展置换E#
选择扩展置换:F函数的输入是上一轮的右边和轮函数,由于上一轮的右边为32bit,而轮函数是48bit,所以需要对上一轮的右边进行扩展,从32bit扩展到48bit。方法是将32bit写成8*4的矩阵,然后增加两列,也就是增加16bit,增加两列的内容按照位置下标与相应位置的内容相同。
6.压缩替代(S盒)#
压缩替代S盒:在经过选择扩展置换之后,将得到48bit信息与48bit轮密钥进行异或。异或后的信息作为S盒的输入。将输入的48bit分成8组,每组6bit,然后每组的输出为4bit。根据分组号选择相应的S盒,将6bit中的第一个比特位和第六个比特位作为行号,中间4个比特位作为列号,选择一个16进制数字,然后将输入的6bit数字替换成S盒中的4bit数字(一个十六进制数字)。
7.置换(P盒)#
置换P盒:上一个S盒的输出32bit作为P盒的输入,按照置换表中的顺序进行置换。
二.DES算法解密流程#
1.解密流程图#
2.解密算法的公式化表示#
解密算法:下一轮的左边不变成为上一轮的右边,下一轮的左边和轮密钥(与加密使用轮密钥次序相反)作为轮函数的输入,轮函数的输出和下一轮的右边异或后作为上一轮的左边。(方便记忆:与加密的左右是相反的)
三.DES的特点#
作者:machi
出处:https://www.cnblogs.com/machi12/p/15712831.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2019-12-20 Android小记(整理一下自己犯过的错误)