1. 程式人生 > >非常通俗易懂的解釋密碼演算法原理!

非常通俗易懂的解釋密碼演算法原理!

密碼分析(上)

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 - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - -  - - -  - - - - -  - - - - - -