【信息安全】DES加密算法学习记录
参考资料:
1.哔哩哔哩:DES加密算法|密码学|信息安全
2.中国大学MOOC 现代密码学(电子科技大学)
1.哔哩哔哩:[DES加密算法|密码学|信息安全]
开始输入64bit
明文数据,然后分成两部分,L0与R0,L0与R0都是32bit
,R0直接赋给了L1,而R1需要将R0和K1进行轮函数的运算后的结果与L0异或,图中为R1 = L0 ^ f(R0, K1)
。之后的每轮都是如此,最后得到一个R16和L16,将R16与L16拼接在一起,然后再将拼接后的结果逆置化得到一个64bit
的密文。
注:
K1-K16
都是48bit
的子密钥
那么32bit是如何与48bit的密钥运算的呢?这就涉及到了轮函数。
在轮函数中:
第一步:是进行E扩展
,将32bit
扩展为48bit
第二步:是让扩展后的48bit
数据与48bit
的子密钥进行异或
第三步:将第二步异或的结果通过S盒进行压缩,将48bit
再变为32bit
第四步:32bit
数据经过P盒置换(仍为32bit
)输出结果
这个轮函数输出的结果再与L0异或就得到了R1。
下面按顺序说明一下每一步的过程:
1.初始置换
表中第一个位置58的含义是将原始数据第58位的数据置换到第1位,第二个位置50的含义是将原始数据第50位的数据置换到第二位,以此类推。
2.轮函数
32bit到48bit的过程是按照表格来扩展,增加了前后两列,其中第一个32含义为把原始数据第32位的数据放到第1位,其余同理。这样就添加了两列。
进一步看,是将原始32bit数据分成了8个4bit的数据,然后在4bit数据的第一位和最后一位都增加了一位,增加数据的第一位是原始数据前一个4bit数据的最后一位,增加数据的最后一位是原始数据后一个4bit数据的第一位。
最后得到了扩展后的48bit数据。
S盒数据的压缩处理是将上一步轮函数得到的48bit数据分为8个6bit的数据,然后根据8个6进4出的S盒进行压缩,也就是说将每个6bit的数据都压缩为4bit的数据,这样就变为了8个4bit的数据,也就是32bit,
下图为具体压缩过程,将每个6bit的数据压缩为4bit,头尾组合在一起转为十进制是3,中间组合在一起是15,对应3行15列,在S盒的表格中找到3行15列,为13,这个13就是压缩结果,然后将13转化为二进制1101,即为111111 -> 1101的过程。其余同理。
上一步压缩后得到的32bit数据再经过P盒的置换(打乱),表中第一个16的含义为将之前数据的第16位放到第1位,其余同理。
P盒置换后得到的结果与L0进行异或,得到的结果赋给R1。
依此进行16次迭代运算,就可以得到R16和L16,然后将R16与L16经过最后的逆置换(与初始置换原理相同,置换表不同),即得到密文。
下面再说一下密钥生成的过程,一开始说到,初始是64bit的密钥,那是如何变到48bit的呢?
64bit的密钥首先经过PC-1表的置换,置换后就得到去掉8位校验位的56位结果。
剩余56bit数据分为C0与D0两部分,每部分是28bit,然后C1和D1经过移位次数表得到C1,D1。
C1是由C0左移一位得到的,D1是由D0左移一位得到的,C2,D2分别由C1,D1左移1位得到(由移位次数表确定移动几位)。
C1,D1拼接在一起经过PC-2表得到48bit的数据,这个数据就是子密钥K1的值
具体例子:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析