DES加密算法学习前奏

 

       这几天看了一下DES加密,认真看的话这个算法并不难,有时候觉得困难时因为自己看不下去。茫茫人海,和己者寡。

       <!--[endif]-->

       要学习DES加密算法,我觉得有几点是要先了解的,下面一一列出来:

<!--[if !supportLists]-->1.  <!--[endif]-->模2加运算

这个是比较好理解的,就是两个数相加然后除2取余。

<!--[if !supportLists]-->2.  <!--[endif]-->理解其中的置换

一开始的时候就会对明文进行置换,通过初始置换IP

<!--[endif]-->

这个表的含义就是,第一个58就是你明文中的第58个元素,你要放到1的位置,然后把明文中第50个元素放到2的位置,以此类推。

<!--[if !supportLists]-->3.  <!--[endif]-->子密钥的生成

<!--[endif]-->

子密钥生成分为三步走:

第一步,先把密钥中的奇偶校验为去掉,然后根据选择置换PC-1讲剩下的密钥分成两块C0D0

第二步,将C0D0进行循环左移变换,变换后生成C1D1,然后C1D1合并,通过选择置换PC-2生成子密钥K1

第三步,C1D1再次经过循环左移变换,生成C2D2C2D2合并,通过选择置换PC-2生成子密钥K2

第四步,以此类推,需要注意其中循环左移的位数,一共是循环左移十六次,其中LS1(第一次),LS2(第二次),LS9LS16是循环左移一位,其他的都是左移两位。

<!--[if !supportLists]-->4.  <!--[endif]-->DES的核心——加密函数 <!--[if !vml]--><!--[endif]-->

加密函数的加密过程也可以通过三步走:

       第一步,将R0通过位选择函数E置换,其实这是一个扩充的置换,因为R0本身是32位的(这点先记住就行了,后一篇文章会说),而生成的子密钥是48位的,因此需要扩充一下,方能按位运算。

       第二步,将扩充完的R0和子密钥K1进行模2加运算,得到48位的一个串,把这个串从左到右分为8组,每组6个字符。这里设8组分别为B1B2B3B4B5B6B7B8。其中Bj=b1b2b3b4b5b6

       第三步,通过S盒来收缩,把每组中的b1b6放一块,换算为十进制,b2b3b4b5放一块,也换算为十进制。b1b6代表S盒中的行标,b2b3b4b5代表列标。比如说B1=011111,那么b1b6就等于十进制的1b2b3b4b5等于十进制的15,也就是对应表中的S1块中的第1行(注意不是0行),15列,也就是8,然后把8变为二进制1000。这就完成了S盒收缩变换,然后通过S盒输出的就是32位的一个串。

<!--[endif]-->

              第四步,把32位的串经过置换函数P的置换得到的结果就是这个核心函数的产物了。

 

       

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值