【信息安全】DES加密算法学习记录

参考资料:
1.哔哩哔哩:DES加密算法|密码学|信息安全
2.中国大学MOOC 现代密码学(电子科技大学)


1.哔哩哔哩:[DES加密算法|密码学|信息安全]

image

开始输入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。

image
下面按顺序说明一下每一步的过程:
1.初始置换
表中第一个位置58的含义是将原始数据第58位的数据置换到第1位,第二个位置50的含义是将原始数据第50位的数据置换到第二位,以此类推。
image
2.轮函数
32bit到48bit的过程是按照表格来扩展,增加了前后两列,其中第一个32含义为把原始数据第32位的数据放到第1位,其余同理。这样就添加了两列。
进一步看,是将原始32bit数据分成了8个4bit的数据,然后在4bit数据的第一位和最后一位都增加了一位,增加数据的第一位是原始数据前一个4bit数据的最后一位,增加数据的最后一位是原始数据后一个4bit数据的第一位。
最后得到了扩展后的48bit数据。

image

image
S盒数据的压缩处理是将上一步轮函数得到的48bit数据分为8个6bit的数据,然后根据8个6进4出的S盒进行压缩,也就是说将每个6bit的数据都压缩为4bit的数据,这样就变为了8个4bit的数据,也就是32bit,
image

image
下图为具体压缩过程,将每个6bit的数据压缩为4bit,头尾组合在一起转为十进制是3,中间组合在一起是15,对应3行15列,在S盒的表格中找到3行15列,为13,这个13就是压缩结果,然后将13转化为二进制1101,即为111111 -> 1101的过程。其余同理。
image

上一步压缩后得到的32bit数据再经过P盒的置换(打乱),表中第一个16的含义为将之前数据的第16位放到第1位,其余同理。
P盒置换后得到的结果与L0进行异或,得到的结果赋给R1。
依此进行16次迭代运算,就可以得到R16和L16,然后将R16与L16经过最后的逆置换(与初始置换原理相同,置换表不同),即得到密文。
image

下面再说一下密钥生成的过程,一开始说到,初始是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的值
image
具体例子:
image

image

image


2.中国大学MOOC [现代密码学(电子科技大学)]

image

image

image

image

image

image

image

image

posted @   Tshaxz  阅读(162)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
Language: HTML
点击右上角即可分享
微信分享提示