非常通俗易懂的解釋密碼演算法原理!
密碼分析(上)
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+2)mod 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(那麼L0、R0都是32位)
(2) 輪計算的公式
Li = R(i-1)
Ri = L(i-1) ⊕
f(R(i-1), Ki)(Li、Ri還都是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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -