初识DES

DES

DES简介

DES全称为Data EncryptionStandard,977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS)。DES属于分组密码,采用对称密码体制,所采用的加密和解密密钥是相同的。

DES加密原理

基本思想

将二进制序列的明文分成每64bit一组,用长为64bit的密钥对其进行16轮代换和置换加密,最后形成密文。

过程总览

具体可分为如下几个部分:

  • 初始置换IP
  • 迭代变换
  • 初始逆置换IP-1

初始置换IP

对64个明文bit进行置换,得到乱序的64位bit组,然后分成左右两端,每段以32bit的L和R表示。 规则如下:

585042342618102
605244362820124
625446383022146
645648403224168
574941332517191
595143352719113
615345372921135
635547393123157

这里的数字表示的是原数据的位置,不是数据

取前32位为L0,后32位为R0

迭代变换

一次性生成所有需要的16个子密钥ki

Li = (Ri-1)

Ri = (Li-1)⊕ F(Ri-1, Ki)

Ri加密函数 F 详解

F函数由4个部分组成

  • 48位子密钥生成
  • 扩展运算E (32bit->48bit)
  • 压缩运算S (48bit->32bit)
  • 置换运算P
48位密钥运算

子密钥生成:

不考虑每个字节的第8位,DES的密钥由64位减至56位,每个字节的第8位作为奇偶校验位。

  • 通过置换选择PC-1,将56位密钥分为28bit的C、D两组:
  • 57 49 41 33 25 17 9 1 58 50 42 34 26 18
  • 10 2 59 51 43 35 27 19 11 3 60 52 44 36
  • 63 55 47 39 31 23 15 7 62 54 46 38 30 22
  • 14 6 61 53 45 37 29 21 13 5 28 20 12 4

设:k=k1k2k...k64,则C0 = k57k49...k36, D0 = k63k55...k4。

  • 将C、D分别循环左移 ti+1 位
轮数12345678
位数11222222
轮数910111213141516
位数12222221

设:Ci = c1c2...c27c28,则C2 = c2c4...c28c1。

  • 通过置换选择PC-2,将C、D两组合成为子密钥Ki
14171124153281562110
23191242681672720132
415231374755304051453348
444939563453464250362932

设:CiDi = b1b2b3...b56,则ki = b14b17...b32。

一次性运行16轮,得到所有所需的子密钥

扩展运算E

先将Ri-1扩展为48位

与初始置换时相同这里的数字表示的也是原数据的位置

压缩运算S

扩展完后的48位数据与本轮子密钥进行异或运算

将运算完的48bit数据分为8bit的8组,送入8个S盒中。S盒将6bit输入映射为4bit输出

设输入 = b1b2b3b4b5b6,找到对应S盒中坐标位置为(b1b6,b2b3b4b5)的数M,其二进制m1m2m3m4即为输出结果。

附上8个S盒:

S盒10123456789101112131415
01441312151183106125907
10157414213110612119538
24114813621115129731050
31512824917511314100613
S盒20123456789101112131415
01518146113497213120510
13134715281412011069115
20147111041315812693215
31381013154211671205149
S盒30123456789101112131415
01009146315511312711428
11370934610285141211151
21364981530111212510147
31101306987415143115212
S盒40123456789101112131415
07131430691012851112415
113811561503472121101419
21069012117131513145284
33150610113894511127214
S盒50123456789101112131415
02124171011658315130149
11411212471315015133986
24211110137815912563014
31181271142136150910453
S盒60123456789101112131415
01211015926801334147511
11015427129561131401138
29141552812370410113116
34321295151011141760813
S盒70123456789101112131415
04112141508133129751061
11301174911014351221586
21411131237141015680592
36111381410795015142312
S盒80123456789101112131415
01328461511110931450127
11151381037412561101492
27114191214206101315358
32114741081315129035611
置换运算P

对8个S盒输出的32位结果进行位置置换

167202129122817
11523265183110
282414322739
19133062211425

将输出结果与本轮左边Li-1按位摸2相加即得Ri

初始逆置换IP逆

将16轮迭代后得到的L16R16拼接为64位结果,进行位置置换

408481656246432
397471555236331
386461454226230
375451353216129
364441252206028
353431151195927
342421050185826
33141949175725

输出结果即为64位密文。

DES解密

与加密算法相同;将64位密文当作输入,在迭代时反序使用子密钥,即第一次私用子密钥k16,最后一次使用k1;输出结果即为明文。

三重DES

由于DES在穷举攻击下比较脆弱,可以采用多个密钥多次加密的方法强化它,即多重DES

二重DES:

密文C = Ek2(Ek1(P))

明文P = Dk1(Dk2(C))
复制代码

二重DES容易被“中间相遇攻击”,实际也不够安全

三重DES:

密文C = Ek1(Dk2(Ek1(P)))

明文P = Dk1(Ek2(Dk1(P)))
复制代码

也可以使用三个不同的密钥:

密文C = Ek3(Dk2(Ek1(P)))

明文P = Dk1(Ek2(Dk3(P)))
复制代码





参考文章:

DES_百度百科baike.baidu.com/item/DES/21…

密码学之DES/AES算法juejin.im/entry/5b4ca…

DES算法原理完整版blog.csdn.net/qq_27570955…

安全体系(一)—— DES算法详解www.cnblogs.com/songwenlong…

转载于:https://juejin.im/post/5c87717e5188257e1b351c73

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值