非常通俗易懂的解释密码算法原理!

来源:互联网 发布:淘宝哪些店铺书包好看 编辑:程序博客网 时间:2024/06/10 05:03

      密码分析(上)

Tip:因为考试需要而总结的,因为写的比较通俗易懂,就放到博客里来了。

一、代换密码

1.1 移位(凯撒)密码

   应该是  

       注意:别被左边那种公式误导了,应该是先加再取余的,下面我按0-25代表a-z来算(这个无所谓了,你用ASCII码来算都可以,只要最后再算回字母来表示密文就行了)

       mod就是求余数的,N就是26(26个英文字母),假如k取为3

              比如a的加密过程,

              (‘a’ + 3) mod 26就相当于4 26取余 算出来就是‘d’(4)

              再比如z的加密过程

              (‘z’ + 3) mod 26就相当于28 26取余 算出来就是‘c’(3)

如果先取余就是25+3 (28)这个就跑出a-z的范围了

       举个例子

              原密码:a     o     p     c      d     e      f

              加密后:d     r      s      f      g  h   i

1.2 单表代换

       简单说就是一个字母在一张密码表里对应固定的另一个字符

       加密表(当然这表可以由自己随便给[一行放不下,放两行了]):

              0     1     2     3     4     5     6     7     8     9     10    11    12

              21    12    25    17    24    23    19    15    22    13    18    3     9

              -- - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - -- - - -

              13    14    15    16    17    18    19    20    21    22    23    24    25

              5     10    2     8     16    11    14    7     1     4     20    0     6

        解密表(扳着脚趾头想都可以想到是上面翻过来的):

              0     1     2     3     4     5     6     7     8     9     10    11    12

              24    21    15    11    22    13    25    20    16    12    14    18    1

              -- - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - -- - - -

              13    14    15    16    17    18    19    20    21    22    23    24    25

              9     19    7     17    3     10    6     23    0     8     5     4     2

       0-25分别代表A-Z,就比如说c(2)加密就会变为z(25),解密时z(25)-->c(2)

       举个例子

              原密码:a     o     p     c      d     e      f

              加密后:v     k     c      .      .      .      . (剩下的我就不算了,这26个字母数的比较烦)

1.3 仿射代换(乘数密码)

  应该是

       注意:还是别被左边那种公式误导了,应该是先加再取余的,解密的时候肯定先减掉了,比如k1 取7,k2取2,N还是26个英文字母,最终加密公式就是(7m+2)mod 26(m就是密码),解密公式就是(c-2)/7 mod 26(c是加密后的数据,-1次方就是除法,都知道的)

              比如a是0  加密:0×7+2mod 26 = 2    即为 c

              c是2   解密:((2 – 2/7 )mod 26 = 2   即为a

       举个例子

              原密码:a     o     p     c      d     e      f

              加密后:c      u     d     .      .      .      . (剩下的我就不算了)

1.4 多表代换(维吉尼亚代换方阵)


       这个相当简单,只要把这个表记住就万事大吉了(啥?记不住,那你写在手心上吧! ! !)

       首当其冲的举个例子

              比如密钥串为radio  加密时就把密码按每5位为一组(radio的长度)来加密比如aopcdef前五个aopcd就是一组,ef又是一组

              a的对应密码就是r行的a列,

              o的对应密码就是a行的o列,

              p的对应密码就是d行的p列,

              c的对应密码就是i行的c列,

              d的对应密码就是o行的d列,

       - - - - - - - - - - - - - - - - - - - - -- - - - - - - - -- - - - - - - - - - - - - - -

              e的对应密码就是r行的e列,

              f的对应密码就是a行的f列(就这个规律,就这么简单,记住上面27*27的表搞定一切)

       - - - - - - - - - - - - - - - - - - - - -结果- - - - - -- - - - - - - - - - - -- - -

              原密码:a     o     p     c      d     e      f

              加密后:r      p     s      .      .      .      . (剩下的你自己填下试试吧)

二、置换密码

       为啥叫置换,因为这个算法仅仅只是把密码字符的位置换了一下

       2.1  无密钥换位

              这个非常非常简单

     直接举个例子

              原密码:a     o     p     c      d     e      f

              加密过程:a    o   p(当然这一行写几个要看要求,若1行写1个绝对出题者有病)

                                  c    d    e

                                 f    *    *

                加密后:a     c      f      o     d     *     p    e      *

               总结一下:原密码横着写几行,最后一行写不满放成*,然后从上到下竖着写完就是加密的密文;解密的话,先竖着写下来然后再横着写回来并且去掉*不就是密码吗?       (什么?你看不懂,那你还是重修下小学课程吧. . .)

      2.2 有密钥换位

               这个也是非常的简单

      直接举个例子

                原密码:a     o     p     c      d     e      f

                加密密钥为:p=(p(1)p(2)p(3)p(4))=(2, 4, 1, 3)

                加密过程:a    o    p    c

                                    o    c   a    p

                                    d    e   f    *

                                    e   *    d    f

                加密后:o     c      a     p     e      *     d    f

           总结一下:密钥p=(p(1)p(2)p(3)p(4))=(2,4, 1, 3)意思是,把第2个数放到第一个位置,把第4个数放到二个位置,第1个数放到第三个位置,第3个数放到第四个位         置,解密的话,(1,2,3,4) -->(2,4, 1,3)-->(1,2,3,4)2413变为1234你不会吗,不会?那你还是顺便把幼儿园也重修了吧. . .不会解密的继续往下看)

                原密码:a     o     p     c      .      .      .    (一,二,三,四)  (1,2,3,4)

       加密后:o     c      a     p     .      .      .     (一,二,三,四)  (2,4, 1, 3)

                现存的:o     c      a     p     .      .      .    

                                     / **  个位置的内容2放回到第二个位置

                                        *   个位置的内容4放回到第四个位置

                                        *   个位置的内容1放回到第一个位置

                                        *   个位置的内容3放回到第三个位置

                                        */

                 解密后:a     o     p     c      .      .      .    (一,二,三,四) (1,2,3,4)


三、DES                                        (分组密码,是对称密码的一种)

- - - - - - - -  - - - - - - - -- - - - - - - - - - 简单概述- - - - - - - - - - - - -  - - - - - - - -- - - - - - - - - - - - - -  - - - - - - - -- - - - - - - - - - - - - -  - - - - - - - -- - - - - - - - - - - - - -  - - - - - - - -- - - - - -

       分组密码:用一个密钥将一串N长的密码分成N长的密文块,并且可逆

       分组密码算法的设计:扩散(Diffusion) 混淆(Confusion)

       分组密码两个参数:密钥长度,分组长度

       DES加密运算包括1个初始置换IP,16个轮运算以及一个末置换IP-1,最后得到64比特的输出。

       初始置换IP的功能是将输入的64位数据分组按位重新组合,没有任何密码意义(不需要密钥)

- - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - -- - - - - - - -- - - - - - - - - - - - - - - - - - - - -  - - - - - - - -- - - - - - - - - - - - - -  - - - - - - - -- - - - - - - - - - - - - -  - - - - - - - -- - - - - 

       3.1 置换表 


CSDN上的没数据的表格好乱,我就截图代替了

                  注意,这个表里面的数字指的都是位置,不是内容。这一个格子里面实际就表示一位1或0二进制数字

                 解释:一行8个,总共8行,1放到了第四十个位置(看黄图,红框,第五行第8列),所以逆置换要40位置里面的1放回来,填入40就OK,2 (绿框,1*8),3(蓝框,                    6*8) 剩下的你自己类比(提示:最好别看着书上32页抄),为什么这样,这不是和二(2)有密钥换位一样吗(还看不懂?那么请到色盲/文盲救助中心参与治疗吧!)

       

算法流程图

        3.2 简要介绍步骤:

                (1) 初始置换IP:

                           把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位

                           即那个黄图的上四行为L0,下四行为R0(那么L0R0都是32)


               (2) 轮计算的公式

                              Li = R(i-1)     

                              Ri = L(i-1) ⊕ f(R(i-1), Ki)(LiRi都是32)

                                             ⊕相当于按位异或,只有0⊕1=或1⊕0=1,1⊕1=0, 0⊕0=0

                                             情侣记法,一男一女才是真的情侣,不同的才是真的

- - - - - - - - - - - - - - - - 以下是f(R(i-1), Ki)要做的事,到下一个绿条结束- - - - - - - - - - - - - - -


f函数的图解

               (3) 扩展置换E(也叫位选择表)如下图

 

 

 

 

                   这个就是把Ri(32位)扩展成48位(6*8)[因为这个表比如有些位置的内容会放俩次的,比如1位置的出现了两次,内容肯定还是二进制的,图片上的数字仅表示位置],                然后把结果分为B1 B2. . .B8都是6位的子块,然后把这些子块与K密钥相异或(就那个情侣⊕)做为S0 S1 ... S8(S盒,选择(替代)函数)的输入

 

         (4) S盒

                    S盒就是把上面的Bi子块再转换成一个4的块,那么现在S1(B1) S2(B2) . . .S8(B8)都是4位的子块(当然还是二进制的)。

                   具体找的时候,Bi里的b1、b6的那俩数组成的数字(两个二进制组成)对应S这个大表的行,Bi里的b2、b3、b4、b5的这四个数组成的数字(四个二进制组成)对应S这               个大表的列,这行列一交叉对应就会找到输出4位)

         举个例子:

                   假如B1是1 1 0 0 00 ,即b1-->1 b2 -->1 b3 --> 0b4 --> 0 b5 -->0 b6 -->0那么在S1的行号10(即10进制的2),在S1的列号是1000(即10进制的8)着书               上的那个表就得到了15(变成4位那就是1111)

                   {废话:这也是S盒为什么是4行(00/01/10/11)16列的,因为咱的书上都没标注行列号,如果你直接看书肯定看不明白,一会位置一会二进制的,浮躁的人肯定调浆糊了!}


               (5) 换位表P

 

 

                    这个就是将S1(B1) S2(B2) . . .S8(B8)合起来的32位(4*8)换个位置然后输出(具体内容肯定也是二进制010101,只是换下位置)

            (6) 子(轮)密钥的生成过程


                   具体过程看图就大致看出K(64位)先通过PC-1置换分成C0 、D0(为啥是两个28,28*2不是56,因为还有8位是奇偶校验位,奇偶校验是啥,暂时把它当成一个标记,             只是保证数据有戏的一串数字),每次新生成子密钥前都先左移一位,然后再与PC-2置换生成新的子密钥Ki

               ①第一个子密钥换位函数表PC-1

                          ②第二个子密钥换位函数表PC-2

                                   (有些位置的内容没有那就是被抛弃了,所以58位数才会变为48位的)


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - -- - - - - - - - - - - - - - - - - - - - - - - END - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - -  - - -  - - - - -  - - - - - - 

 



 

 

0 0