? ? ? ??
目錄
1、幾個(gè)基本概念
第一個(gè)置換是:初始置換-終止置換-IP置換-初始置換IP
第二個(gè)置換:擴(kuò)展置換(32位到48位)
第三個(gè)置換:壓縮置換(S盒48位到32位)
第四個(gè)運(yùn)算:循環(huán)左移(位數(shù)不變)
第五個(gè)置換:置換選擇pc-1(64位到56位)
第六個(gè)置換:壓縮置換pc-2(56位到48位)
第七個(gè)運(yùn)算:F變換
第八個(gè)置換:P-盒置換(48bit到32bit)
第九個(gè)置換:逆置換
2、子密鑰生成過程
3、des加密過程(迭代)
4、子密鑰算法的流程圖
5、加密算法流程圖
? ? ? ? CSDN上看了很多文章,但是我感覺寫的太過專業(yè)化,很多時(shí)候讀起來很費(fèi)力氣,明明是簡單的過程,但是經(jīng)過復(fù)雜的說法,很難使人一讀就懂。經(jīng)過深入的思考,以及算法報(bào)告是對(duì)學(xué)生理解能力的考核,我認(rèn)為加密算法這么寫更易懂,同樣體現(xiàn)了對(duì)這個(gè)知識(shí)點(diǎn)的學(xué)習(xí)和思考:那么開始吧,首先我們要明白幾個(gè)置換過程,這個(gè)和加密算法無關(guān),你只需要明白這個(gè)置換即可。
1、幾個(gè)基本概念
第一個(gè)置換是:初始置換-終止置換-IP置換-初始置換IP
雖然我寫了四個(gè)置換,是因?yàn)楹芏鄬I(yè)的人用了不同的稱呼,但他們的方法都是一樣的原來是64位的,置換后依然是64位的,所以看到這三個(gè),你就想著這是把原數(shù)據(jù)打亂了,怎么置換呢,首先按照需要加密雙方的約定指定一張表,這張表寫著64位數(shù)字,代表著咱們要加密的64位原文,比如我和另一個(gè)要給他發(fā)消息的人約定了如下表格:
58,50,42,34,26,18,10,2,
60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6,
64,56,48,40,32,24,16,8,
57,49,41,33,25,17, 9,1,
59,51,43,35,27,19,11,3,
61,53,45,37,29,21,13,5,
63,55,47,39,31,23,15,7,
我們有64位數(shù)據(jù),此時(shí)將輸入的64位明文的第1位置換到第40位,第2位置換到第8位,第3位置換到第48位。以此類推,最后一位是原來的第7位。置換規(guī)則是規(guī)定的。
此時(shí)我將得到經(jīng)過置換的64位數(shù)據(jù)。
第二個(gè)置換:擴(kuò)展置換(32位到48位)
這個(gè)32位怎么來的不用管,先理解怎么置換的,我把這32位數(shù)據(jù)分為8組,每組我就有4個(gè),如下:
每組的4位,我們規(guī)定讓他用一種方法變成6位,怎么變呢?
把每組的最后一個(gè)數(shù)字補(bǔ)到前一組的開頭,像拉火車一樣,車尾接車頭,形成如下的48位數(shù)據(jù):
第三個(gè)置換:壓縮置換(S盒48位到32位)
同樣48位怎么來的,先不管,看看置換方法:
我和那個(gè)人收我消息的人規(guī)定的另一張表是用在這的,這表我倆稱之為S盒,而且我倆一起做了8張,每張有4行16列,共64個(gè)方框。
我們將要壓縮的48位分為8組,每組6位,這6位二進(jìn)制數(shù),掐頭去尾,將拿出來的這兩個(gè)數(shù)組成一個(gè)新的數(shù)字,轉(zhuǎn)為十進(jìn)制,作為我和那個(gè)人規(guī)定的S盒這張表的行數(shù)。中間的四個(gè)數(shù)字轉(zhuǎn)為十進(jìn)制,作為列數(shù)。行列確定了表中的一個(gè)加密數(shù)字。當(dāng)然四個(gè)二進(jìn)制數(shù)最大的是1111,就是十進(jìn)制15,所以我倆規(guī)定的這張表有重復(fù)數(shù)字,但是最大數(shù)字是15。這樣6位數(shù)字,變成了表中的一個(gè)數(shù)字,且它最大是1111,共計(jì)8組,6*8變成了4*8。
第四個(gè)運(yùn)算:循環(huán)左移(位數(shù)不變)
左移比較簡單,就是循環(huán)左移,頭尾相接,進(jìn)行移動(dòng),但我倆規(guī)定第一次左移要移動(dòng)一個(gè)位置,其中第一次、第二次、第九次、第十六次是循環(huán)左移一位,其他都是左移兩位。
第五個(gè)置換:置換選擇pc-1(64位到56位)
置換選擇就是置換后,選擇一種方式讀取。我倆還有張表,叫這個(gè)名字--縮小選擇換位表1(置換選擇表1)。
將64位數(shù)據(jù),分為8組,每組8個(gè),是不是這樣的:
表里有64個(gè)數(shù)據(jù),但是最后一位我們不要,前七位留著,但不是按照正常的方式讀取,現(xiàn)在我們從下到上讀取,讀取的過程中,我們給他分為兩組,C0和D0,C0是左邊藍(lán)色的部分,拿走28位,D0不僅從下往上,還要從右往左,再拿走28位。
第六個(gè)置換:壓縮置換pc-2(56位到48位)
這次的表你猜對(duì)了,還是我們規(guī)定的,同樣的壓縮,但這是表2。位數(shù)不同,所以方法不同,因?yàn)檫@部分會(huì)用在子密鑰上,所以加了個(gè)pc。
這次我們規(guī)定上圖表中的56位數(shù)據(jù),第9、18、22、25、35、38、43、54這8位被剔除了,這樣就壓縮到了48位。
第七個(gè)運(yùn)算:F變換
F變換是一個(gè)運(yùn)算流程的統(tǒng)稱,這是過程是將32位數(shù)據(jù)擴(kuò)展置換到48位,這48位與pc-2置換后的48位進(jìn)行異或運(yùn)算(異或運(yùn)算兩個(gè)數(shù)相同結(jié)果為0,不同為1),經(jīng)過F變換后,還是48位數(shù)據(jù)。
第八個(gè)置換:P-盒置換(48bit到32bit)
S-盒代替運(yùn)算,每一盒得到4位,8盒共得到32位輸出。這32位輸出作為P盒置換的輸入塊。P盒置換將每一位輸入位映射到輸出位。任何一位都不能被映射兩次,也不能被略去。經(jīng)過P-盒置換的結(jié)果與最初64位分組的左半部分異或,然后左右兩部分交換,開始下一輪迭代。
P-盒置換表(表示數(shù)據(jù)的位置)共32位。將32位的輸入的第16位放在第一位,第七位放在第二位,第二十位放在第三位,以此類推。如下:
16 |
7 |
20 |
21 |
29 |
12 |
28 |
17 |
1 |
15 |
23 |
26 |
5 |
18 |
31 |
10 |
2 |
8 |
24 |
14 |
32 |
27 |
3 |
9 |
19 |
13 |
30 |
6 |
22 |
11 |
4 |
25 |
第九個(gè)置換:逆置換
將初始置換進(jìn)行16次的迭代,即進(jìn)行16層的加密變換,這個(gè)運(yùn)算過程我們暫時(shí)稱為函數(shù)f。得到L16和R16,將此作為輸入塊,進(jìn)行逆置換得到最終的密文輸出塊。逆置換是初始置換的逆運(yùn)算。從初始置換規(guī)則中可以看到,原始數(shù)據(jù)的第1位置換到了第40位,第2位置換到了第8位。則逆置換就是將第40位置換到第1位,第8位置換到第2位。以此類推,逆置換規(guī)則如下。
40 |
8 |
48 |
16 |
56 |
24 |
64 |
32 |
39 |
7 |
47 |
15 |
55 |
23 |
63 |
31 |
38 |
6 |
46 |
14 |
54 |
22 |
62 |
30 |
37 |
5 |
45 |
13 |
53 |
21 |
61 |
29 |
36 |
4 |
44 |
12 |
52 |
20 |
60 |
28 |
35 |
3 |
43 |
11 |
51 |
19 |
59 |
27 |
34 |
2 |
42 |
10 |
50 |
18 |
58 26 |
33 |
1 |
41 |
9 |
49 |
17 |
57 |
25 |
注:DES算法的加密密鑰是根據(jù)用戶輸入的秘鑰生成的,該算法把64位密碼中的第8位、第16位、第24位、第32位、第40位、第48位、第56位、第64位作為奇偶校驗(yàn)位,在計(jì)算密鑰時(shí)要忽略這8位.所以實(shí)際中使用的秘鑰有效位是56位。秘鑰共64位,每次置換都不考慮每字節(jié)的第8位,因?yàn)檫@一位是奇偶校驗(yàn)位,所以64位秘鑰的第8、16、24、32、40、48、56、64位在計(jì)算秘鑰時(shí)均忽略。
2、子密鑰生成過程
明文64位-> 初始置換 -> pc-1置換選擇(56bit) -> 分組C0、D0(每組28bit)->兩組都循環(huán)左移 ->? pc-2壓縮置換(48bit),生成了子密鑰key1(48bit)
由于我們需要16輪變換,也稱之為“輪操作”。這個(gè)k1要和R0做異或運(yùn)算,即F變換。得到的48位結(jié)果進(jìn)入S1盒壓縮處理,為32位,和L0交換順序后的64位密文,是我們下一次循環(huán)pc-1置換選擇的初始值。
根據(jù)輪數(shù),將Cn和Dn分別循環(huán)左移1位或2位。
循環(huán)左移每輪移動(dòng)的位數(shù)如下:
3、des加密過程(迭代)
明文64位->初始置換-> 分組 ->? S盒壓縮處理(16輪) -> ?逆初始置換IP-1-> 密文
比如我有一句話要傳送給收件人 I love you,yy
首先使用ascii(電腦編碼系統(tǒng)),進(jìn)入計(jì)算機(jī)后為二進(jìn)制,如圖:
存入計(jì)算機(jī)為:0110 1001(i)??? ?0010 0001(空格)?? ??0110 1100(l)??? 0110 1111(o)?? 0111 0110(v)??? 0110 0101(e)?? ??0010 1100(逗號(hào))?? ??0111 1001(y)??? 0111 1001(y)
(這里沒有考慮數(shù)據(jù)類型,比如一般int占4個(gè)字節(jié),以及物理層傳輸時(shí)的比特流的編碼)
共計(jì)9個(gè)字符。每個(gè)1字節(jié),即8位,共計(jì)72位,此時(shí),我們將數(shù)據(jù)分為多組,每組64位,即我們只要前64位來演示des加密后的密文。目前我們有64bit的明文。
???????? 64bit的明文首先要按照表3-2進(jìn)行IP置換,即原始數(shù)據(jù)的58位放在新數(shù)據(jù)的第1位,原始數(shù)據(jù)的第50位放在新數(shù)據(jù)第2位,以此類推。得到新的64bit數(shù)據(jù)分成L0 和R0 左右兩部分,每部分為32bit。
首先對(duì)原始數(shù)據(jù)整理一下 :
序號(hào) 1 |
0110 ?1001(i)?????????????????????????? |
2 |
0010 ?0001(空格) |
3 |
0110 ?1100(l) |
4 |
0110 ?1111(o) |
5 |
0111 ?0110(v) |
6 |
0110 ?0101(e) |
7 |
0010 ?1100(逗號(hào)) |
8 |
0111 1001(y) |
(好多啊,好麻煩吖,開始考慮這項(xiàng)任務(wù)有沒有必要了)
這里只置換兩行舉例:
序號(hào) 1 |
1011? 1101???????????? |
2 |
1001? 0000 |
由此我們得到置換后的64bit數(shù)據(jù)。
將此分為L0(32bit)和R0(32bit),R0與秘鑰結(jié)合(異或運(yùn)算)后,進(jìn)行S1盒壓縮處理,處理后的數(shù)據(jù)為32位繼續(xù)作為R0,與秘鑰結(jié)合,而原來的R0賦值給L0,即:原來的右半部分成為新的左半部分。用式子表示如下:
Ln = R(n - 1);(不存在R負(fù)1)
Rn = L(n - 1)⊕f(Rn-1,kn-1)
[⊕:異或運(yùn)算 ?Kn是向第N層輸入的48位的秘鑰,f是以Rn-1和Kn為變量的輸出32位的函數(shù)]
如此16輪后,數(shù)據(jù)依然是64bit,而右半部分的R0由幾步運(yùn)算構(gòu)成:擴(kuò)展置換(32bit->48bit);秘鑰置換(Kn的生成,n=0~16);S-盒壓縮處理替代;P-盒置換,最后還有交換和逆置換,完成輸入密文的任務(wù)。
4、子密鑰算法的流程圖
文章來源:http://www.zghlxwxcb.cn/news/detail-474725.html
5、加密算法流程圖
文章來源地址http://www.zghlxwxcb.cn/news/detail-474725.html
到了這里,關(guān)于des加密算法最簡單的解釋(更簡單,大白話,讀完就理解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!