一、DES基礎知識
DES技術特點
DES是一種用56位金鑰來加密64位資料的方法
DES採取了分組加密演算法:明文和密文為64位分組長度
DES採取了對稱演算法:加密和解密除金鑰編排不同外,使用同一演算法
DES的安全性不依賴於演算法的保密,安全性僅以加密金鑰的保密為基礎; 金鑰可為任意的56位數,具有複雜性,使得破譯的開銷超過可能獲得的利益
採用代換和置換的組合,共16輪
只使用了標準的算術和邏輯運算,易於實現
DES演算法的組成
初始置換函式IP
子金鑰Ki及獲取
密碼函式F
逆置換函IP-1
DES的輸入與輸出
DES的明文分組長度為64位(位元)
初始置換函式IP接受長度為64位的明文輸入
逆置換函式IP-1輸出64位的密文
DES的16個子金鑰
在子金鑰的獲取過程中,通過金鑰置換Pc-1獲取從Kl到K16共16個子金鑰,這16個子金鑰分別順序應用於密碼函式的16次完全相同的迭代運算中
DES解密原理
DES的解密演算法與加密演算法完全相同,只需要將金鑰的應用次序與加密時相反應用即可
解密過程是初始置換函式IP接受長度為64位元的密文輸入,將16個子金鑰按照K16到K1的順序應用與函式F的16輪迭代運算中,然後將迭代的結果經由逆置換函式IP-1得到64位的明文輸出
DES演算法流程圖
DES流程圖
二、加密過程詳解
1.入口引數
Key、Data、Mode
Key ===> 7個位元組共56位,是DES演算法的工作金鑰
Data ===> 8個位元組64位,是要被加密或被解密的資料
Mode ===> DES的工作方式,有兩種:加密或解密
2.初始置換
64位明文分組首先經過一個初始置換函式IP進行置換運算,產生一個64位的輸出X0
該輸出X0被分成兩個分別為32位的左半部分L0和右半部分R0,
L0,R0用於F函式的16輪迭代運算迭代的初始輸入
初始置換表
注意:這裡的數字表示的是原資料的位置,不是資料值
初始置換表
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位明文的第1位置換到第40位,第2位置換到第8位,第3位置換到第48位。以此類推,最後一位是原來的第7位。置換規則是規定的
經初始置換表置換後,得出的結果為X0,接著X0再分為左半部分L0、右半部分R0
注意:這裡的數字表示的是原資料的位置,不是資料值
這裡很多人會疑問,為什麼是左右啊?這分明是上下啊!
這裡的左右是針對明文(並非明文二進位制碼),當你把明文化為二進位制碼排列成8*8矩陣時,就成為了視覺上的上下,其實對於明文字身來說這是左右
L0
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
R0
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
3.獲取子金鑰
子金鑰的獲取主要通過置換和移位運算來實現
DES加密演算法的金鑰長度為56位,由使用者提供,但使用者輸入的金鑰是64位的,按8行8列從左到右從上到下地排列,其中,每行的第8位用於奇偶校驗
(1)對輸入的祕鑰去除每個位元組的最後一位後,進行如下代換
PC-1表
PC-1表 57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4
從表中我們也可以發現第8、16、24、32、40、48、56、64共8個校驗位被去掉
(2)將置換後的二進位制碼繼續分為前28位C0、後28位D0
C0
57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
D0
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4
(3)C0、D0兩部分經過迴圈左移(每輪按下表進行移位),每次迴圈左移都需要將兩部分合併成56位
通過金鑰置換Pc-1獲取從Kl到K16共16個子金鑰,這16個子金鑰分別順序應用於密碼函式的16次完全相同的迭代運算中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
我們以第一次迴圈左移為例:
原資料:
C0
57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
D0
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4
左移後資料:
C0
49 41 33 25 17 9 1
58 50 42 34 26 18 10
2 59 51 43 35 27 19
11 3 60 52 44 36 57
D0
55 47 .39 31 23 15 7
62 54 46 38 30 22 14
6 61 53 45 37 29 21
13 5 28 20 12 4 63
合併後資料:
49 41 33 25 17 9 1
58 50 42 34 26 18 10
2 59 51 43 35 27 19
11 3 60 52 44 36 57
55 47 .39 31 23 15 7
62 54 46 38 30 22 14
6 61 53 45 37 29 21
13 5 28 20 12 4 63
(4)合併後的資料經過壓縮置換Pc-2後得到對應輪次的48位子金鑰
PC-2置換為壓縮置換即置換後的輸出資料的位數要比置換前輸入的位數要少,即某些位的資料在置換的過程中被去掉了
由下表可知,在壓縮置換過程中,原來的8行7列共56位資料被壓縮成8行6列的48位資料
在壓縮置換過程中,第9、18、22、25、35、38、43、54共8位資料被丟掉
去掉指定位資料後,繼續按下表進行置換
14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32
(5)根據同樣的演算法生成一共用於16次迭代的16個子金鑰,演算法本身是將子金鑰的生成包括在每次迭代過程中的。但是筆者為了更好讓大家理解,將它排除在迭代過程中(因為子金鑰的生成與Li和Ri是無關的,只與使用者輸入祕鑰有關)。因此這樣並不會影響DES加密結果
=============================迭代入口=================================
5.S盒替換
(1)將Ri進行E擴充套件置換成為48位
注意:
第一次迭代是唯一一次與其他十五次迭代輸入方式不同的迭代,其R0為原明文右半部分二進位制碼;其餘十五次Ri(i != 0)均為P盒置換輸出作為Ri
先將資料的右半部分通過擴充套件置換E從32位擴充套件為48位。之所以稱為擴充套件置換。是因為置換後的資料比置換前的資料的位數要多。擴充套件置換(E)通過將原32位資料中的某些位重複出現達到擴充套件的目的
擴充套件表如下:
E擴充套件置換表
32 01 02 03 04 05
04 05 05 06 08 09
08 09 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 01
(2)將4步驟生成的本輪子金鑰(48位)與E擴充套件後的48位E_Ri進行異或運算,輸出48位二進位制資料
(3)將(2)的結果作為輸入塊進行S盒代替運算,功能是把48位資料變為32位資料
該運算由8個不同的代替盒(S盒)完成。每個S-盒有6位輸入,4位輸出
所以48位的輸入塊被分成8個6位的分組,每一個分組對應一個S-盒代替操作;經過S-盒代替,形成8個4位分組結果
注意:每一個S-盒的輸入資料是6位,輸出資料是4位,但是每個S-盒自身是64位
以下是8個S盒:
S_1 = [
[14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7],
[0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8],
[4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0],
[15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13]
]
S_2 = [
[15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10],
[3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5],
[0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15],
[13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9]
]
S_3 = [
[10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8],
[13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1],
[13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7],
[1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12]
]
S_4 = [
[7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15],
[13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9],
[10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4],
[3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14]
]
S_5 = [
[2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9],
[14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6],
[4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14],
[11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3]
]
S_6 = [
[12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11],
[10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8],
[9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6],
[4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13]
]
S_7 = [
[4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1],
[13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6],
[1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2],
[6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12]
]
S_8 = [
[13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7],
[1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2],
[7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8],
[2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11]
]
下面我們來示例S8盒的運算過程:
S8盒
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
2 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
3 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11
①我們知道上步的計算結果是一位48位的資料,然後將48位分為8行6列
②第一行對應S1盒,第二行對應S2盒,以此類推,第八行對應S8盒
③假設第八行資料為 101101
④取第一位和最後一位轉為10進製作為行號;在此例中即 11 ===> 3行
⑤取中間的4位轉為10進製作為列號;在此例中即 0110 ===> 6例
⑥根據行號和列號找到S8盒中對應的資料(注意,盒中的行列號下標從0開始)即(2,5)===> 12
⑦將得到的資料轉為二進位制作為輸出的第8行;即 12 ===> 1100
(4)經過(3)的運算,S盒最終生成32位輸出。該32位輸出作為新的Ri,同時作為下一步P盒置換的輸入
6.P盒置換
S盒32位的輸出作為P盒的輸入,P盒置換將每一位輸入位對映到輸出位。任何一位都不能被對映兩次,也不能被略去。P置換使得一個S盒的輸出對下一輪多個S盒產生影響,形成雪崩效應:明文或金鑰的一點小的變動都引起密文的較大變化
P盒置換表如下:
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
(1)將P盒置換的結果與最初的64位分組的左半部分(即Li)異或。將異或的結果作為新的Li
(2)本輪P盒置換結束後,判斷是否繼續進行下一輪的迭代,如果是,左右兩部分交換,即Li ===> Ri,Ri ===> Li;交換後開始下一輪迭代;如果否(即不進行下一路迭代),則從下方迭代出口出去,繼續進行下一步操作
注意:
如果16輪迭代已經完成,則可以從下面的迭代出口出去,否則繼續回到上邊的迭代入口完成未完成的迭代
===================================迭代出口=================================
7.IP-1盒置換(IP盒逆置換)
在完成完全相同的16輪運算後(即從上面的迭代出口出來時),以其左邊32位作為R16 ,以其右邊32位作為L16 。將得到的兩部分資料合在一起,再經過一個逆置換函式IP-1即可得到64位的密文
(1)逆置換是初始置換的逆運算
從初始置換規則中可以看到,原始資料的第1位置換到了第
40位,第2位置換到了第8位。則逆置換就是將第40位置換到第1位,第8位置換到第2位。以此類推
(2)IP-1逆置換表
注意:
這裡的數字表示的是原資料的位置,不是資料值
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
三、程式碼實現
程式碼宣告:
本程式使用Python3實現,如果您想測試使用,可以直接安裝python3,然後執行即可,內部方法全部自定義,無需匯入任何庫
理論上程式碼不需要這麼龐大,但是為了讓讀者可以更清楚地認識到DES加密過程中的每一個細節,特意將任何階段的情況都編寫了相對美觀的輸出功能
筆者水平有限,望大神可以指出不對或不合理之處
本博文、程式碼可以無授權轉發
程式碼段可以自行使用,但不可以將此程式碼單獨寫入任何論壇,博文中(轉發除外)
# 遍歷二維陣列 def show_array(message, list_obj): print("========================================", message, "========================================") for list_temp in list_obj: print(list_temp) def show_array_no_format(list_obj): for temp_list in list_obj: for data in temp_list: print(data, " ", end='') print() # 根據ASCII得到8位字母的64位二進位制程式碼 def is_ascii(str_obj): result_temp = '' result = [] temp_list = [] for temp in str_obj: if ord(temp) < 0 or ord(temp) >= 128: return False, None else: temp_data = bin(int(str(ord(temp)), 10)) temp_data = temp_data[2:] if len(temp_data) < 8: temp_data = temp_data.rjust(8, '0') result_temp = result_temp + temp_data for index in range(1, len(result_temp) + 1): temp_list.append(int(result_temp[index - 1])) if index % 8 == 0: result.append(temp_list) temp_list = [] return True, result # 根據單小標得到雙下標 def get_x_y(position, row): position = position - 1 x = int(position / row) y = position % row return [x, y] # 初始置換 def init_replace(plain_text): result_data = [] temp_data = [] for index in range(1, 65): source_position = IP_Table[get_x_y(index, 8)[0]][get_x_y(index, 8)[1]] temp_data.append(plain_text[get_x_y(source_position, 8)[0]][get_x_y(source_position, 8)[1]]) if index % 8 == 0: result_data.append(temp_data) temp_data = [] return result_data # 將置換後的明文分為左右兩部分 # 這裡很多人會疑問,為什麼是左右啊?這分明是上下啊! # 這裡的左右是針對明文(並非明文二進位制碼),當你把明文化為二進位制碼排列成8*8矩陣時,就成為了視覺上的上下,其實對於明文字身來說這是左右 def get_left_right(replace_plaintext): left = [] right = [] sign = 0 for index in replace_plaintext: sign = sign + 1 if sign <= 4: left.append(index) else: right.append(index) return left, right # 去除金鑰二進位制碼的最後一列 def update_secret(source_secret): result = [] for temp_list in source_secret: temp_list.pop() result.append(temp_list) return result # 通過PC-1表置換祕鑰二進位制碼 def pc1_secret(updates_secret): result = [] temp_data = [] for index in range(1, 57): source_position = PC_1_Table[get_x_y(index, 7)[0]][get_x_y(index, 7)[1]] temp_data.append(updates_secret[get_x_y(source_position, 8)[0]][get_x_y(source_position, 8)[1]]) if index % 7 == 0: result.append(temp_data) temp_data = [] return result def left_shift(source_left, source_right, rounds): bits = 2 obj_left = [] obj_right = [] list_sum = [] result = [] temp_list = [] result_left = [] result_right = [] if rounds not in range(1, 17): return False, None, None else: if rounds in [1, 2, 9, 16]: bits = 1 else: bits = 2 for index in range(1, len(source_left) * len(source_left[0]) + 1): obj_left.append(source_left[get_x_y(index, 7)[0]][get_x_y(index, 7)[1]]) for index in range(1, len(source_right) * len(source_right[0]) + 1): obj_right.append(source_right[get_x_y(index, 7)[0]][get_x_y(index, 7)[1]]) for i in range(bits): obj_left.insert(len(obj_left), obj_left[0]) obj_left.remove(obj_left[0]) for i in range(bits): obj_right.insert(len(obj_right), obj_right[0]) obj_right.remove(obj_right[0]) list_sum.extend(obj_left) list_sum.extend(obj_right) for index in range(1, len(list_sum) + 1): temp_list.append(list_sum[index - 1]) if index % 7 == 0: result.append(temp_list) temp_list = [] for index in range(1, len(obj_left) + 1): temp_list.append(obj_left[index - 1]) if index % 7 == 0: result_left.append(temp_list) temp_list = [] for index in range(1, len(obj_right) + 1): temp_list.append(obj_right[index - 1]) if index % 7 == 0: result_right.append(temp_list) temp_list = [] return result, result_left, result_right # 通過PC-2表置換祕鑰二進位制碼 def pc2_secret(updates_secret): result = [] temp_data = [] for index in range(1, 49): source_position = PC_2_Table[get_x_y(index, 6)[0]][get_x_y(index, 6)[1]] temp_data.append(updates_secret[get_x_y(source_position, 7)[0]][get_x_y(source_position, 7)[1]]) if index % 6 == 0: result.append(temp_data) temp_data = [] return result # 經16次迴圈左移得到16個子金鑰 def get_sub_key(lc, rd): left_c = lc right_c = rd result = [] for times in range(1, 17): print("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||") print("||||||||||||||||||||||||||||||||||||||第", times, "次子金鑰開始生成||||||||||||||||||||||||||||||||||||||") left_secret_data, left_c, right_c = left_shift(left_c, right_c, times) show_array("C0、D0經迴圈左移合併後的二進位制祕鑰", left_secret_data) pc2_secret_data = pc2_secret(left_secret_data) show_array("經PC-2壓縮置換後的二進位制祕鑰===>子金鑰", pc2_secret_data) print("||||||||||||||||||||||||||||||||||||||第", times, "次子金鑰生成完成||||||||||||||||||||||||||||||||||||||") print("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||") result.append(pc2_secret_data) return result # 將 M * N 的二重列表轉換為 X * Y 的二重列表;其中 M * N = X * Y def conversion_list(source_list, m, n, x, y): if m * n != x * y: return False, None all_list = [] result = [] temp = [] for temp_list in source_list: for temp_data in temp_list: all_list.append(temp_data) for index in range(1, x * y + 1): temp.append(all_list[index - 1]) if index % y == 0: result.append(temp) temp = [] return result # 通過E擴充套件置換表將明文資料的右半部分即R0擴充套件為48位 def e_extend(source_right): source_right_format = conversion_list(source_right, 4, 8, 8, 4) result = [] temp_list = [] for index in range(1, 48 + 1): source_position = E_EXTEND_TABLE[get_x_y(index, 6)[0]][get_x_y(index, 6)[1]] temp_list.append(source_right_format[get_x_y(source_position, 4)[0]][get_x_y(source_position, 4)[1]]) if index % 6 == 0: result.append(temp_list) temp_list = [] return result # 將經E擴充套件後的48位二進位制碼與16個48位子金鑰進行異或運算,整個過程稱為f函式運算 def f_xor(right_extend_data, sub_key, times): result = [] result_temp = [] temp_list = [] print("第", times, "次迭代運算(F函式)原子金鑰(上)及經E擴充套件的48位R0二進位制碼(中)及二者異或後的結果(下)") show_array_no_format(sub_key) show_array_no_format(right_extend_data) for index in range(1, len(right_extend_data) * len(right_extend_data[0]) + 1): data = sub_key[get_x_y(index, 6)[0]][get_x_y(index, 6)[1]] ^ right_extend_data[get_x_y(index, 6)[0]][get_x_y(index, 6)[1]] result_temp.append(data) for data in result_temp: print(data, " ", end='') print() for index in range(1, len(result_temp) + 1): temp_list.append(result_temp[index - 1]) if index % 6 == 0: result.append(temp_list) temp_list = [] return result # 將擴充套件後的子金鑰與擴充套件後的明文二進位制碼的右半部分進行S盒替換 def s_replace(sub_keys_extend): result = [] sub_key_temp = [] temp_list = [] for index in range(1, len(sub_keys_extend) + 1): line_str = str(sub_keys_extend[index - 1][0]) + str(sub_keys_extend[index - 1][5]) row_str = str(sub_keys_extend[index - 1][1]) + str(sub_keys_extend[index - 1][2]) + str(sub_keys_extend[index - 1][3]) + str( sub_keys_extend[index - 1][4]) line = int(line_str, 2) row = int(row_str, 2) source_data = S[index - 1][line][row] temp_data = bin(source_data) temp_data = temp_data[2:] data = temp_data.rjust(4, '0') for temp in data: temp_list.append(int(temp)) result.append(temp_list) temp_list = [] return result def p_replace(source_s_result, left_data, times): result = [] result_temp = [] temp_list = [] show_array(str("第" + str(times) + "次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是"), source_s_result) for index in range(1, len(source_s_result) * len(source_s_result[0]) + 1): source_position = P[get_x_y(index, 4)[0]][get_x_y(index, 4)[1]] result_temp.append(source_s_result[get_x_y(source_position, 4)[0]][get_x_y(source_position, 4)[1]]) print("第", times, "次迭代運算(F函式)中P盒置換後作為輸入的S盒32位二進位制祕鑰被替換成如下二進位制資料") for index in range(1, len(result_temp) + 1): print(result_temp[index - 1], " ", end='') if index % 4 == 0: print() left_format = conversion_list(left_data, 4, 8, 8, 4) show_array(str("第" + str(times) + "次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是P盒置換前作為輸入的明文左部分32位二進位制資料是"), left_format) for index in range(1, len(source_s_result) * len(source_s_result[0]) + 1): data = result_temp[index - 1] ^ left_format[get_x_y(index, 4)[0]][get_x_y(index, 4)[1]] temp_list.append(data) if index % 4 == 0: result.append(temp_list) temp_list = [] return result def sixteen_iteration(left0, right0, sub_keys): left_data = left0 right_data = right0 temp_data = [] result = [] result_temp = [] for index in range(1, len(sub_keys) + 1): e_extend_right = e_extend(right_data) f_xor_result = f_xor(e_extend_right, sub_keys[index - 1], index) right_data = s_replace(f_xor_result) left_data = p_replace(right_data, left_data, index) temp_data = left_data left_data = right_data right_data = temp_data for temp_list in left_data: result_temp.append(temp_list) for temp_list in right_data: result_temp.append(temp_list) temp_list = [] for index in range(1, len(result_temp) * len(result_temp[0]) + 1): temp_list.append(result_temp[get_x_y(index, 4)[0]][get_x_y(index, 4)[1]]) if index % 8 == 0: result.append(temp_list) temp_list = [] return result def ip_1_replace(sixteen_iteration_result): result = [] temp_str = "" result_list = [] temp_list = [] for index in range(1, len(sixteen_iteration_result) * len(sixteen_iteration_result[0]) + 1): source_position = IP_1_TABLE[get_x_y(index, 8)[0]][get_x_y(index, 8)[1]] temp_str += str(sixteen_iteration_result[get_x_y(source_position, 8)[0]][get_x_y(source_position, 8)[1]]) temp_list.append(sixteen_iteration_result[get_x_y(source_position, 8)[0]][get_x_y(source_position, 8)[1]]) if index % 8 == 0: result.append(temp_str) result_list.append(temp_list) temp_str = "" temp_list = [] return result, result_list def get_ascii_by_bin(bin_list): result = "" for bin_data in bin_list: num = int(bin_data, 2) result += chr(num) return result if __name__ == "__main__": # IP置換矩陣 IP_Table = [ [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] ] IP_1_TABLE = [ [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] ] # PC-1表 PC_1_Table = [ [57, 49, 41, 33, 25, 17, 9], [1, 58, 50, 42, 34, 26, 18], [10, 2, 59, 51, 43, 35, 27], [19, 11, 3, 60, 52, 44, 36], [63, 55, 47, 39, 31, 23, 15], [7, 62, 54, 46, 38, 30, 22], [14, 6, 61, 53, 45, 37, 29], [21, 13, 5, 28, 20, 12, 4] ] # PC-2表 PC_2_Table = [ [14, 17, 11, 24, 1, 5], [3, 28, 15, 6, 21, 10], [23, 19, 12, 4, 26, 8], [16, 7, 27, 20, 13, 2], [41, 52, 31, 37, 47, 55], [30, 40, 51, 45, 33, 48], [44, 49, 39, 56, 34, 53], [46, 42, 50, 36, 29, 32] ] # 擴充套件置換E表 E_EXTEND_TABLE = [ [32, 1, 2, 3, 4, 5], [4, 5, 6, 7, 8, 9], [8, 9, 10, 11, 12, 13], [12, 13, 14, 15, 16, 17], [16, 17, 18, 19, 20, 21], [20, 21, 22, 23, 24, 25], [24, 25, 26, 27, 28, 29], [28, 29, 30, 31, 32, 1] ] # 以下是8個S盒功能表 S_1 = [ [14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7], [0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8], [4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0], [15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13] ] S_2 = [ [15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10], [3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5], [0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15], [13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9] ] S_3 = [ [10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8], [13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1], [13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7], [1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12] ] S_4 = [ [7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15], [13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9], [10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4], [3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14] ] S_5 = [ [2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9], [14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6], [4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14], [11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3] ] S_6 = [ [12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11], [10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8], [9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6], [4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13] ] S_7 = [ [4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1], [13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6], [1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2], [6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12] ] S_8 = [ [13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7], [1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2], [7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8], [2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11] ] S = [S_1, S_2, S_3, S_4, S_5, S_6, S_7, S_8] P = [ [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] ] plaintext_state, bin_plaintext = is_ascii("computer") show_array("明文二進位制碼", bin_plaintext) init_replace_plaintext = init_replace(bin_plaintext) show_array("初始置換", init_replace_plaintext) left_plaintext, right_plaintext = get_left_right(init_replace_plaintext) show_array("左半部分 L0", left_plaintext) show_array("右半部分 R0", right_plaintext) secret_state, bin_secret = is_ascii("networks") show_array("金鑰二進位制碼", bin_secret) pc1_secret_text = update_secret(bin_secret) show_array("去除祕鑰最後一列的二進位制祕鑰", pc1_secret_text) secret_text = pc1_secret(bin_secret) show_array("經PC-1置換後的二進位制祕鑰", secret_text) left_secret, right_secret = get_left_right(secret_text) show_array("左半部分 C0", left_secret) show_array("右半部分 D0", right_secret) all_sub_keys = get_sub_key(left_secret, right_secret) show_array("生成的十六個子金鑰如下:", all_sub_keys) iteration_result = sixteen_iteration(left_plaintext, right_plaintext, all_sub_keys) show_array("明文和密碼經十六輪F函式迭代後最終結果", iteration_result) ascii_secret_result, bin_secret_result = ip_1_replace(iteration_result) show_array("明文經過祕鑰通過DES加密演算法最終生成以下密文", bin_secret_result) print("\n 密文轉為ASCII碼為", get_ascii_by_bin(ascii_secret_result))
四、程式執行效果
J:\Project\Python\des\venv\Scripts\python.exe J:/Project/Python/des/src/des.py ======================================== 明文二進位制碼 ======================================== [0, 1, 1, 0, 0, 0, 1, 1] [0, 1, 1, 0, 1, 1, 1, 1] [0, 1, 1, 0, 1, 1, 0, 1] [0, 1, 1, 1, 0, 0, 0, 0] [0, 1, 1, 1, 0, 1, 0, 1] [0, 1, 1, 1, 0, 1, 0, 0] [0, 1, 1, 0, 0, 1, 0, 1] [0, 1, 1, 1, 0, 0, 1, 0] ======================================== 初始置換 ======================================== [1, 1, 1, 1, 1, 1, 1, 1] [1, 0, 1, 1, 1, 0, 0, 0] [0, 1, 1, 1, 0, 1, 1, 0] [0, 1, 0, 1, 0, 1, 1, 1] [0, 0, 0, 0, 0, 0, 0, 0] [1, 1, 1, 1, 1, 1, 1, 1] [0, 0, 0, 0, 0, 1, 1, 0] [1, 0, 0, 0, 0, 0, 1, 1] ======================================== 左半部分 L0 ======================================== [1, 1, 1, 1, 1, 1, 1, 1] [1, 0, 1, 1, 1, 0, 0, 0] [0, 1, 1, 1, 0, 1, 1, 0] [0, 1, 0, 1, 0, 1, 1, 1] ======================================== 右半部分 R0 ======================================== [0, 0, 0, 0, 0, 0, 0, 0] [1, 1, 1, 1, 1, 1, 1, 1] [0, 0, 0, 0, 0, 1, 1, 0] [1, 0, 0, 0, 0, 0, 1, 1] ======================================== 金鑰二進位制碼 ======================================== [0, 1, 1, 0, 1, 1, 1, 0] [0, 1, 1, 0, 0, 1, 0, 1] [0, 1, 1, 1, 0, 1, 0, 0] [0, 1, 1, 1, 0, 1, 1, 1] [0, 1, 1, 0, 1, 1, 1, 1] [0, 1, 1, 1, 0, 0, 1, 0] [0, 1, 1, 0, 1, 0, 1, 1] [0, 1, 1, 1, 0, 0, 1, 1] ======================================== 去除祕鑰最後一列的二進位制祕鑰 ======================================== [0, 1, 1, 0, 1, 1, 1] [0, 1, 1, 0, 0, 1, 0] [0, 1, 1, 1, 0, 1, 0] [0, 1, 1, 1, 0, 1, 1] [0, 1, 1, 0, 1, 1, 1] [0, 1, 1, 1, 0, 0, 1] [0, 1, 1, 0, 1, 0, 1] [0, 1, 1, 1, 0, 0, 1] ======================================== 經PC-1置換後的二進位制祕鑰 ======================================== [0, 0, 0, 0, 0, 0, 0] [0, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 0, 1, 0] [1, 1, 1, 1, 1, 0, 0] [1, 0, 0, 0, 1, 1, 1] [1, 1, 0, 1, 0, 1, 0] [0, 0, 1, 1, 1, 0, 0] ======================================== 左半部分 C0 ======================================== [0, 0, 0, 0, 0, 0, 0] [0, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 0, 1, 0] ======================================== 右半部分 D0 ======================================== [1, 1, 1, 1, 1, 0, 0] [1, 0, 0, 0, 1, 1, 1] [1, 1, 0, 1, 0, 1, 0] [0, 0, 1, 1, 1, 0, 0] |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||||||||||||||||||||||||||||||||||||第 1 次子金鑰開始生成|||||||||||||||||||||||||||||||||||||| ======================================== C0、D0經迴圈左移合併後的二進位制祕鑰 ======================================== [0, 0, 0, 0, 0, 0, 0] [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 0, 1, 0, 0] [1, 1, 1, 1, 0, 0, 1] [0, 0, 0, 1, 1, 1, 1] [1, 0, 1, 0, 1, 0, 0] [0, 1, 1, 1, 0, 0, 1] ======================================== 經PC-2壓縮置換後的二進位制祕鑰===>子金鑰 ======================================== [1, 1, 1, 1, 0, 0] [0, 0, 1, 0, 1, 1] [1, 1, 1, 0, 1, 1] [1, 0, 0, 1, 1, 0] [1, 1, 1, 0, 1, 0] [1, 1, 1, 1, 0, 0] [0, 0, 1, 1, 0, 1] [0, 1, 0, 0, 1, 1] ||||||||||||||||||||||||||||||||||||||第 1 次子金鑰生成完成|||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||||||||||||||||||||||||||||||||||||第 2 次子金鑰開始生成|||||||||||||||||||||||||||||||||||||| ======================================== C0、D0經迴圈左移合併後的二進位制祕鑰 ======================================== [0, 0, 0, 0, 0, 0, 1] [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1] [1, 1, 0, 1, 0, 0, 0] [1, 1, 1, 0, 0, 1, 0] [0, 0, 1, 1, 1, 1, 1] [0, 1, 0, 1, 0, 0, 0] [1, 1, 1, 0, 0, 1, 1] ======================================== 經PC-2壓縮置換後的二進位制祕鑰===>子金鑰 ======================================== [1, 1, 1, 0, 0, 0] [0, 0, 1, 0, 1, 1] [1, 1, 1, 0, 0, 1] [1, 1, 0, 1, 1, 0] [1, 1, 1, 0, 0, 1] [1, 1, 1, 0, 0, 0] [1, 0, 1, 1, 1, 0] [1, 1, 1, 0, 1, 0] ||||||||||||||||||||||||||||||||||||||第 2 次子金鑰生成完成|||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||||||||||||||||||||||||||||||||||||第 3 次子金鑰開始生成|||||||||||||||||||||||||||||||||||||| ======================================== C0、D0經迴圈左移合併後的二進位制祕鑰 ======================================== [0, 0, 0, 0, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1] [0, 1, 0, 0, 0, 0, 0] [1, 0, 0, 1, 0, 0, 0] [1, 1, 1, 1, 1, 0, 1] [0, 1, 0, 0, 0, 1, 1] [1, 0, 0, 1, 1, 1, 1] ======================================== 經PC-2壓縮置換後的二進位制祕鑰===>子金鑰 ======================================== [1, 1, 1, 0, 0, 1] [0, 0, 1, 1, 1, 1] [1, 1, 1, 0, 0, 1] [1, 1, 0, 1, 1, 0] [0, 0, 0, 1, 0, 1] [0, 1, 0, 0, 0, 1] [1, 1, 1, 1, 0, 1] [0, 1, 1, 1, 1, 1] ||||||||||||||||||||||||||||||||||||||第 3 次子金鑰生成完成|||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||||||||||||||||||||||||||||||||||||第 4 次子金鑰開始生成|||||||||||||||||||||||||||||||||||||| ======================================== C0、D0經迴圈左移合併後的二進位制祕鑰 ======================================== [0, 0, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 0, 1] [0, 0, 0, 0, 0, 0, 0] [0, 1, 0, 0, 0, 1, 1] [1, 1, 1, 0, 1, 0, 1] [0, 0, 0, 1, 1, 1, 0] [0, 1, 1, 1, 1, 1, 0] ======================================== 經PC-2壓縮置換後的二進位制祕鑰===>子金鑰 ======================================== [1, 1, 1, 0, 0, 1] [1, 0, 1, 1, 1, 1] [0, 1, 1, 1, 0, 1] [1, 1, 0, 0, 1, 0] [0, 1, 0, 1, 1, 1] [1, 1, 1, 0, 0, 1] [0, 0, 0, 0, 1, 1] [1, 1, 0, 1, 0, 0] ||||||||||||||||||||||||||||||||||||||第 4 次子金鑰生成完成|||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||||||||||||||||||||||||||||||||||||第 5 次子金鑰開始生成|||||||||||||||||||||||||||||||||||||| ======================================== C0、D0經迴圈左移合併後的二進位制祕鑰 ======================================== [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 0, 1, 0, 0] [0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 1, 1, 1, 1] [1, 0, 1, 0, 1, 0, 0] [0, 1, 1, 1, 0, 0, 1] [1, 1, 1, 1, 0, 0, 1] ======================================== 經PC-2壓縮置換後的二進位制祕鑰===>子金鑰 ======================================== [1, 1, 1, 0, 1, 1] [1, 0, 1, 1, 0, 1] [0, 1, 1, 1, 0, 1] [1, 1, 0, 0, 1, 1] [0, 1, 0, 0, 0, 0] [0, 1, 1, 1, 1, 0] [1, 1, 0, 1, 1, 1] [1, 0, 1, 1, 0, 1] ||||||||||||||||||||||||||||||||||||||第 5 次子金鑰生成完成|||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||||||||||||||||||||||||||||||||||||第 6 次子金鑰開始生成|||||||||||||||||||||||||||||||||||||| ======================================== C0、D0經迴圈左移合併後的二進位制祕鑰 ======================================== [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1] [1, 0, 1, 0, 0, 0, 0] [0, 0, 0, 0, 0, 1, 1] [0, 1, 1, 1, 1, 1, 0] [1, 0, 1, 0, 0, 0, 1] [1, 1, 0, 0, 1, 1, 1] [1, 1, 0, 0, 1, 0, 0] ======================================== 經PC-2壓縮置換後的二進位制祕鑰===>子金鑰 ======================================== [1, 1, 1, 0, 1, 1] [1, 1, 1, 1, 0, 1] [0, 0, 1, 1, 0, 1] [0, 1, 1, 0, 1, 1] [0, 0, 1, 0, 1, 0] [1, 0, 1, 0, 1, 1] [1, 1, 0, 0, 1, 0] [0, 1, 1, 1, 0, 1] ||||||||||||||||||||||||||||||||||||||第 6 次子金鑰生成完成|||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||||||||||||||||||||||||||||||||||||第 7 次子金鑰開始生成|||||||||||||||||||||||||||||||||||||| ======================================== C0、D0經迴圈左移合併後的二進位制祕鑰 ======================================== [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 0] [1, 0, 0, 0, 0, 0, 0] [0, 0, 0, 1, 1, 1, 1] [1, 1, 1, 1, 0, 1, 0] [1, 0, 0, 0, 1, 1, 1] [0, 0, 1, 1, 1, 1, 1] [0, 0, 1, 0, 0, 0, 1] ======================================== 經PC-2壓縮置換後的二進位制祕鑰===>子金鑰 ======================================== [0, 0, 1, 0, 1, 1] [1, 1, 1, 1, 0, 1] [0, 0, 1, 1, 1, 1] [0, 1, 1, 0, 1, 1] [1, 1, 1, 0, 1, 0] [1, 1, 0, 1, 0, 1] [0, 1, 0, 1, 1, 0] [1, 1, 0, 1, 1, 1] ||||||||||||||||||||||||||||||||||||||第 7 次子金鑰生成完成|||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||||||||||||||||||||||||||||||||||||第 8 次子金鑰開始生成|||||||||||||||||||||||||||||||||||||| ======================================== C0、D0經迴圈左移合併後的二進位制祕鑰 ======================================== [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 0, 1, 0] [0, 0, 0, 0, 0, 0, 0] [0, 1, 1, 1, 1, 1, 1] [1, 1, 0, 1, 0, 1, 0] [0, 0, 1, 1, 1, 0, 0] [1, 1, 1, 1, 1, 0, 0] [1, 0, 0, 0, 1, 1, 1] ======================================== 經PC-2壓縮置換後的二進位制祕鑰===>子金鑰 ======================================== [0, 0, 1, 1, 1, 1] [1, 1, 0, 1, 0, 1] [1, 0, 0, 1, 1, 1] [0, 1, 1, 0, 1, 1] [0, 0, 0, 0, 1, 1] [1, 1, 0, 1, 0, 0] [1, 0, 1, 1, 1, 0] [1, 0, 1, 0, 1, 1] ||||||||||||||||||||||||||||||||||||||第 8 次子金鑰生成完成|||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||||||||||||||||||||||||||||||||||||第 9 次子金鑰開始生成|||||||||||||||||||||||||||||||||||||| ======================================== C0、D0經迴圈左移合併後的二進位制祕鑰 ======================================== [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 0, 1, 0, 0] [0, 0, 0, 0, 0, 0, 0] [1, 1, 1, 1, 1, 1, 1] [1, 0, 1, 0, 1, 0, 0] [0, 1, 1, 1, 0, 0, 1] [1, 1, 1, 1, 0, 0, 1] [0, 0, 0, 1, 1, 1, 1] ======================================== 經PC-2壓縮置換後的二進位制祕鑰===>子金鑰 ======================================== [0, 0, 0, 1, 1, 1] [1, 1, 0, 1, 0, 1] [1, 0, 1, 1, 1, 1] [0, 1, 1, 0, 0, 1] [0, 0, 1, 1, 0, 1] [0, 0, 0, 1, 1, 0] [1, 1, 1, 1, 0, 1] [1, 1, 0, 0, 1, 0] ||||||||||||||||||||||||||||||||||||||第 9 次子金鑰生成完成|||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||||||||||||||||||||||||||||||||||||第 10 次子金鑰開始生成|||||||||||||||||||||||||||||||||||||| ======================================== C0、D0經迴圈左移合併後的二進位制祕鑰 ======================================== [1, 1, 1, 1, 1, 1, 1] [1, 0, 1, 0, 0, 0, 0] [0, 0, 0, 0, 0, 1, 1] [1, 1, 1, 1, 1, 1, 1] [1, 0, 1, 0, 0, 0, 1] [1, 1, 0, 0, 1, 1, 1] [1, 1, 0, 0, 1, 0, 0] [0, 1, 1, 1, 1, 1, 0] ======================================== 經PC-2壓縮置換後的二進位制祕鑰===>子金鑰 ======================================== [0, 0, 0, 1, 1, 1] [1, 1, 0, 1, 1, 1] [1, 0, 0, 1, 1, 1] [0, 1, 1, 1, 0, 1] [1, 1, 1, 1, 1, 1] [0, 1, 1, 0, 0, 0] [1, 0, 0, 0, 0, 1] [0, 1, 0, 1, 1, 0] ||||||||||||||||||||||||||||||||||||||第 10 次子金鑰生成完成|||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||||||||||||||||||||||||||||||||||||第 11 次子金鑰開始生成|||||||||||||||||||||||||||||||||||||| ======================================== C0、D0經迴圈左移合併後的二進位制祕鑰 ======================================== [1, 1, 1, 1, 1, 1, 0] [1, 0, 0, 0, 0, 0, 0] [0, 0, 0, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1] [1, 0, 0, 0, 1, 1, 1] [0, 0, 1, 1, 1, 1, 1] [0, 0, 1, 0, 0, 0, 1] [1, 1, 1, 1, 0, 1, 0] ======================================== 經PC-2壓縮置換後的二進位制祕鑰===>子金鑰 ======================================== [0, 0, 0, 1, 1, 1] [1, 1, 0, 1, 1, 0] [1, 1, 0, 1, 1, 1] [0, 0, 1, 1, 0, 1] [1, 1, 0, 0, 0, 1] [0, 1, 1, 1, 1, 0] [0, 1, 1, 0, 1, 1] [0, 1, 1, 0, 1, 0] ||||||||||||||||||||||||||||||||||||||第 11 次子金鑰生成完成|||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||||||||||||||||||||||||||||||||||||第 12 次子金鑰開始生成|||||||||||||||||||||||||||||||||||||| ======================================== C0、D0經迴圈左移合併後的二進位制祕鑰 ======================================== [1, 1, 1, 1, 0, 1, 0] [0, 0, 0, 0, 0, 0, 0] [0, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1] [0, 0, 1, 1, 1, 0, 0] [1, 1, 1, 1, 1, 0, 0] [1, 0, 0, 0, 1, 1, 1] [1, 1, 0, 1, 0, 1, 0] ======================================== 經PC-2壓縮置換後的二進位制祕鑰===>子金鑰 ======================================== [0, 1, 0, 1, 1, 0] [1, 1, 0, 1, 1, 0] [1, 1, 0, 1, 1, 0] [1, 0, 1, 1, 0, 1] [0, 0, 1, 1, 1, 1] [0, 1, 1, 0, 1, 1] [0, 1, 1, 0, 0, 1] [0, 0, 1, 1, 0, 1] ||||||||||||||||||||||||||||||||||||||第 12 次子金鑰生成完成|||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||||||||||||||||||||||||||||||||||||第 13 次子金鑰開始生成|||||||||||||||||||||||||||||||||||||| ======================================== C0、D0經迴圈左移合併後的二進位制祕鑰 ======================================== [1, 1, 0, 1, 0, 0, 0] [0, 0, 0, 0, 0, 0, 1] [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 0, 0, 1, 1] [1, 1, 1, 0, 0, 1, 0] [0, 0, 1, 1, 1, 1, 1] [0, 1, 0, 1, 0, 0, 0] ======================================== 經PC-2壓縮置換後的二進位制祕鑰===>子金鑰 ======================================== [1, 1, 0, 1, 1, 0] [0, 1, 1, 0, 1, 0] [1, 1, 0, 1, 1, 0] [1, 0, 1, 1, 0, 1] [1, 0, 1, 1, 1, 0] [1, 0, 1, 1, 0, 1] [0, 1, 0, 0, 1, 1] [1, 0, 0, 1, 1, 0] ||||||||||||||||||||||||||||||||||||||第 13 次子金鑰生成完成|||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||||||||||||||||||||||||||||||||||||第 14 次子金鑰開始生成|||||||||||||||||||||||||||||||||||||| ======================================== C0、D0經迴圈左移合併後的二進位制祕鑰 ======================================== [0, 1, 0, 0, 0, 0, 0] [0, 0, 0, 0, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1] [1, 0, 0, 1, 1, 1, 1] [1, 0, 0, 1, 0, 0, 0] [1, 1, 1, 1, 1, 0, 1] [0, 1, 0, 0, 0, 1, 1] ======================================== 經PC-2壓縮置換後的二進位制祕鑰===>子金鑰 ======================================== [1, 1, 0, 1, 0, 0] [0, 1, 1, 0, 1, 0] [1, 1, 1, 0, 1, 0] [1, 0, 1, 1, 1, 1] [0, 0, 0, 0, 1, 1] [0, 0, 1, 1, 1, 0] [1, 1, 1, 1, 1, 0] [1, 0, 0, 1, 1, 1] ||||||||||||||||||||||||||||||||||||||第 14 次子金鑰生成完成|||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||||||||||||||||||||||||||||||||||||第 15 次子金鑰開始生成|||||||||||||||||||||||||||||||||||||| ======================================== C0、D0經迴圈左移合併後的二進位制祕鑰 ======================================== [0, 0, 0, 0, 0, 0, 0] [0, 0, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 0, 1] [0, 1, 1, 1, 1, 1, 0] [0, 1, 0, 0, 0, 1, 1] [1, 1, 1, 0, 1, 0, 1] [0, 0, 0, 1, 1, 1, 0] ======================================== 經PC-2壓縮置換後的二進位制祕鑰===>子金鑰 ======================================== [1, 1, 1, 1, 0, 0] [0, 1, 1, 0, 1, 1] [1, 1, 1, 0, 1, 0] [1, 0, 0, 1, 1, 0] [1, 0, 1, 1, 1, 1] [1, 0, 0, 1, 1, 0] [1, 1, 0, 0, 1, 1] [0, 1, 0, 0, 0, 1] ||||||||||||||||||||||||||||||||||||||第 15 次子金鑰生成完成|||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ||||||||||||||||||||||||||||||||||||||第 16 次子金鑰開始生成|||||||||||||||||||||||||||||||||||||| ======================================== C0、D0經迴圈左移合併後的二進位制祕鑰 ======================================== [0, 0, 0, 0, 0, 0, 0] [0, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 0, 1, 0] [1, 1, 1, 1, 1, 0, 0] [1, 0, 0, 0, 1, 1, 1] [1, 1, 0, 1, 0, 1, 0] [0, 0, 1, 1, 1, 0, 0] ======================================== 經PC-2壓縮置換後的二進位制祕鑰===>子金鑰 ======================================== [1, 1, 1, 1, 0, 0] [0, 0, 1, 0, 1, 1] [1, 1, 1, 0, 0, 0] [1, 0, 1, 1, 1, 0] [1, 1, 1, 0, 0, 0] [1, 1, 0, 0, 1, 1] [1, 0, 0, 0, 0, 1] [1, 1, 0, 1, 1, 1] ||||||||||||||||||||||||||||||||||||||第 16 次子金鑰生成完成|||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ======================================== 生成的十六個子金鑰如下: ======================================== [[1, 1, 1, 1, 0, 0], [0, 0, 1, 0, 1, 1], [1, 1, 1, 0, 1, 1], [1, 0, 0, 1, 1, 0], [1, 1, 1, 0, 1, 0], [1, 1, 1, 1, 0, 0], [0, 0, 1, 1, 0, 1], [0, 1, 0, 0, 1, 1]] [[1, 1, 1, 0, 0, 0], [0, 0, 1, 0, 1, 1], [1, 1, 1, 0, 0, 1], [1, 1, 0, 1, 1, 0], [1, 1, 1, 0, 0, 1], [1, 1, 1, 0, 0, 0], [1, 0, 1, 1, 1, 0], [1, 1, 1, 0, 1, 0]] [[1, 1, 1, 0, 0, 1], [0, 0, 1, 1, 1, 1], [1, 1, 1, 0, 0, 1], [1, 1, 0, 1, 1, 0], [0, 0, 0, 1, 0, 1], [0, 1, 0, 0, 0, 1], [1, 1, 1, 1, 0, 1], [0, 1, 1, 1, 1, 1]] [[1, 1, 1, 0, 0, 1], [1, 0, 1, 1, 1, 1], [0, 1, 1, 1, 0, 1], [1, 1, 0, 0, 1, 0], [0, 1, 0, 1, 1, 1], [1, 1, 1, 0, 0, 1], [0, 0, 0, 0, 1, 1], [1, 1, 0, 1, 0, 0]] [[1, 1, 1, 0, 1, 1], [1, 0, 1, 1, 0, 1], [0, 1, 1, 1, 0, 1], [1, 1, 0, 0, 1, 1], [0, 1, 0, 0, 0, 0], [0, 1, 1, 1, 1, 0], [1, 1, 0, 1, 1, 1], [1, 0, 1, 1, 0, 1]] [[1, 1, 1, 0, 1, 1], [1, 1, 1, 1, 0, 1], [0, 0, 1, 1, 0, 1], [0, 1, 1, 0, 1, 1], [0, 0, 1, 0, 1, 0], [1, 0, 1, 0, 1, 1], [1, 1, 0, 0, 1, 0], [0, 1, 1, 1, 0, 1]] [[0, 0, 1, 0, 1, 1], [1, 1, 1, 1, 0, 1], [0, 0, 1, 1, 1, 1], [0, 1, 1, 0, 1, 1], [1, 1, 1, 0, 1, 0], [1, 1, 0, 1, 0, 1], [0, 1, 0, 1, 1, 0], [1, 1, 0, 1, 1, 1]] [[0, 0, 1, 1, 1, 1], [1, 1, 0, 1, 0, 1], [1, 0, 0, 1, 1, 1], [0, 1, 1, 0, 1, 1], [0, 0, 0, 0, 1, 1], [1, 1, 0, 1, 0, 0], [1, 0, 1, 1, 1, 0], [1, 0, 1, 0, 1, 1]] [[0, 0, 0, 1, 1, 1], [1, 1, 0, 1, 0, 1], [1, 0, 1, 1, 1, 1], [0, 1, 1, 0, 0, 1], [0, 0, 1, 1, 0, 1], [0, 0, 0, 1, 1, 0], [1, 1, 1, 1, 0, 1], [1, 1, 0, 0, 1, 0]] [[0, 0, 0, 1, 1, 1], [1, 1, 0, 1, 1, 1], [1, 0, 0, 1, 1, 1], [0, 1, 1, 1, 0, 1], [1, 1, 1, 1, 1, 1], [0, 1, 1, 0, 0, 0], [1, 0, 0, 0, 0, 1], [0, 1, 0, 1, 1, 0]] [[0, 0, 0, 1, 1, 1], [1, 1, 0, 1, 1, 0], [1, 1, 0, 1, 1, 1], [0, 0, 1, 1, 0, 1], [1, 1, 0, 0, 0, 1], [0, 1, 1, 1, 1, 0], [0, 1, 1, 0, 1, 1], [0, 1, 1, 0, 1, 0]] [[0, 1, 0, 1, 1, 0], [1, 1, 0, 1, 1, 0], [1, 1, 0, 1, 1, 0], [1, 0, 1, 1, 0, 1], [0, 0, 1, 1, 1, 1], [0, 1, 1, 0, 1, 1], [0, 1, 1, 0, 0, 1], [0, 0, 1, 1, 0, 1]] [[1, 1, 0, 1, 1, 0], [0, 1, 1, 0, 1, 0], [1, 1, 0, 1, 1, 0], [1, 0, 1, 1, 0, 1], [1, 0, 1, 1, 1, 0], [1, 0, 1, 1, 0, 1], [0, 1, 0, 0, 1, 1], [1, 0, 0, 1, 1, 0]] [[1, 1, 0, 1, 0, 0], [0, 1, 1, 0, 1, 0], [1, 1, 1, 0, 1, 0], [1, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1], [0, 0, 1, 1, 1, 0], [1, 1, 1, 1, 1, 0], [1, 0, 0, 1, 1, 1]] [[1, 1, 1, 1, 0, 0], [0, 1, 1, 0, 1, 1], [1, 1, 1, 0, 1, 0], [1, 0, 0, 1, 1, 0], [1, 0, 1, 1, 1, 1], [1, 0, 0, 1, 1, 0], [1, 1, 0, 0, 1, 1], [0, 1, 0, 0, 0, 1]] [[1, 1, 1, 1, 0, 0], [0, 0, 1, 0, 1, 1], [1, 1, 1, 0, 0, 0], [1, 0, 1, 1, 1, 0], [1, 1, 1, 0, 0, 0], [1, 1, 0, 0, 1, 1], [1, 0, 0, 0, 0, 1], [1, 1, 0, 1, 1, 1]] 第 1 次迭代運算(F函式)原子金鑰(上)及經E擴充套件的48位R0二進位制碼(中)及二者異或後的結果(下) 1 1 1 1 0 0 0 0 1 0 1 1 1 1 1 0 1 1 1 0 0 1 1 0 1 1 1 0 1 0 1 1 1 1 0 0 0 0 1 1 0 1 0 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0 0 1 1 0 0 1 1 1 0 0 0 0 1 0 1 0 1 0 0 1 0 0 0 1 1 0 0 0 0 1 1 0 1 0 1 1 0 0 0 1 0 1 1 1 0 1 0 1 0 1 0 1 ======================================== 第1次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是 ======================================== [0, 0, 0, 0] [1, 0, 1, 1] [0, 1, 0, 0] [1, 0, 1, 1] [0, 0, 0, 0] [1, 0, 1, 1] [1, 0, 0, 0] [0, 1, 1, 0] 第 1 次迭代運算(F函式)中P盒置換後作為輸入的S盒32位二進位制祕鑰被替換成如下二進位制資料 1 1 0 1 0 0 0 0 0 1 1 0 1 0 1 1 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 1 ======================================== 第1次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是P盒置換前作為輸入的明文左部分32位二進位制資料是 ======================================== [1, 1, 1, 1] [1, 1, 1, 1] [1, 0, 1, 1] [1, 0, 0, 0] [0, 1, 1, 1] [0, 1, 1, 0] [0, 1, 0, 1] [0, 1, 1, 1] 第 2 次迭代運算(F函式)原子金鑰(上)及經E擴充套件的48位R0二進位制碼(中)及二者異或後的結果(下) 1 1 1 0 0 0 0 0 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 0 1 1 1 0 0 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 0 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 1 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 0 0 0 1 1 0 1 0 1 1 0 0 1 1 1 1 0 1 0 1 0 1 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 0 0 0 1 0 1 1 0 ======================================== 第2次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是 ======================================== [0, 1, 1, 0] [0, 0, 1, 0] [0, 1, 1, 1] [0, 0, 0, 1] [1, 0, 0, 1] [0, 0, 1, 1] [1, 1, 0, 0] [1, 1, 1, 0] 第 2 次迭代運算(F函式)中P盒置換後作為輸入的S盒32位二進位制祕鑰被替換成如下二進位制資料 1 1 1 0 1 1 0 1 0 0 1 1 0 0 1 1 1 0 1 0 0 0 1 0 0 0 1 0 0 1 0 1 ======================================== 第2次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是P盒置換前作為輸入的明文左部分32位二進位制資料是 ======================================== [0, 0, 0, 0] [1, 0, 1, 1] [0, 1, 0, 0] [1, 0, 1, 1] [0, 0, 0, 0] [1, 0, 1, 1] [1, 0, 0, 0] [0, 1, 1, 0] 第 3 次迭代運算(F函式)原子金鑰(上)及經E擴充套件的48位R0二進位制碼(中)及二者異或後的結果(下) 1 1 1 0 0 1 0 0 1 1 1 1 1 1 1 0 0 1 1 1 0 1 1 0 0 0 0 1 0 1 0 1 0 0 0 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 1 0 1 0 1 0 1 0 1 0 0 1 1 1 1 0 1 0 0 0 0 0 1 1 1 0 0 0 1 0 1 0 0 0 0 1 1 1 1 0 1 1 0 0 0 0 1 1 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 1 1 0 0 0 ======================================== 第3次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是 ======================================== [0, 1, 1, 1] [1, 1, 0, 1] [1, 1, 0, 0] [0, 1, 0, 1] [1, 0, 0, 0] [0, 0, 0, 1] [0, 1, 0, 0] [0, 1, 0, 1] 第 3 次迭代運算(F函式)中P盒置換後作為輸入的S盒32位二進位制祕鑰被替換成如下二進位制資料 1 0 0 0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 1 1 1 0 1 1 0 0 1 1 0 0 1 0 ======================================== 第3次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是P盒置換前作為輸入的明文左部分32位二進位制資料是 ======================================== [0, 1, 1, 0] [0, 0, 1, 0] [0, 1, 1, 1] [0, 0, 0, 1] [1, 0, 0, 1] [0, 0, 1, 1] [1, 1, 0, 0] [1, 1, 1, 0] 第 4 次迭代運算(F函式)原子金鑰(上)及經E擴充套件的48位R0二進位制碼(中)及二者異或後的結果(下) 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 0 1 0 0 1 0 1 1 1 1 1 1 0 0 1 0 0 0 0 1 1 1 1 0 1 0 0 0 1 1 1 0 0 0 0 0 1 1 0 1 0 1 1 0 1 0 1 0 0 0 0 0 0 1 1 0 1 0 1 0 0 0 1 0 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 1 0 0 0 0 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 0 0 0 0 1 1 1 0 0 0 0 1 1 0 1 ======================================== 第4次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是 ======================================== [1, 0, 0, 0] [0, 0, 1, 1] [1, 0, 1, 1] [0, 1, 1, 0] [0, 0, 0, 0] [0, 0, 1, 0] [0, 1, 1, 0] [0, 1, 1, 1] 第 4 次迭代運算(F函式)中P盒置換後作為輸入的S盒32位二進位制祕鑰被替換成如下二進位制資料 0 1 0 0 0 1 0 0 1 1 1 1 0 0 1 0 0 1 0 1 1 1 0 1 0 0 1 0 0 1 0 0 ======================================== 第4次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是P盒置換前作為輸入的明文左部分32位二進位制資料是 ======================================== [0, 1, 1, 1] [1, 1, 0, 1] [1, 1, 0, 0] [0, 1, 0, 1] [1, 0, 0, 0] [0, 0, 0, 1] [0, 1, 0, 0] [0, 1, 0, 1] 第 5 次迭代運算(F函式)原子金鑰(上)及經E擴充套件的48位R0二進位制碼(中)及二者異或後的結果(下) 1 1 1 0 1 1 1 0 1 1 0 1 0 1 1 1 0 1 1 1 0 0 1 1 0 1 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 0 1 1 0 1 1 0 0 1 1 1 1 1 0 0 1 0 1 0 0 1 1 0 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 0 0 1 0 1 0 1 1 1 0 0 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 ======================================== 第5次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是 ======================================== [0, 0, 0, 0] [0, 1, 0, 1] [0, 1, 0, 1] [0, 1, 0, 0] [1, 1, 1, 0] [0, 1, 0, 1] [0, 0, 1, 0] [1, 1, 0, 1] 第 5 次迭代運算(F函式)中P盒置換後作為輸入的S盒32位二進位制祕鑰被替換成如下二進位制資料 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 1 0 1 1 1 1 1 0 0 1 0 1 1 1 0 0 0 ======================================== 第5次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是P盒置換前作為輸入的明文左部分32位二進位制資料是 ======================================== [1, 0, 0, 0] [0, 0, 1, 1] [1, 0, 1, 1] [0, 1, 1, 0] [0, 0, 0, 0] [0, 0, 1, 0] [0, 1, 1, 0] [0, 1, 1, 1] 第 6 次迭代運算(F函式)原子金鑰(上)及經E擴充套件的48位R0二進位制碼(中)及二者異或後的結果(下) 1 1 1 0 1 1 1 1 1 1 0 1 0 0 1 1 0 1 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 0 1 1 1 1 0 0 1 0 0 1 1 1 0 1 1 1 0 0 0 1 0 1 1 1 0 1 0 1 0 1 1 0 1 0 0 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 0 1 0 1 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 1 0 0 1 1 0 0 0 1 0 ======================================== 第6次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是 ======================================== [1, 1, 1, 1] [0, 0, 0, 0] [1, 0, 1, 1] [0, 0, 1, 0] [1, 1, 0, 0] [0, 1, 0, 0] [0, 0, 0, 1] [1, 0, 1, 1] 第 6 次迭代運算(F函式)中P盒置換後作為輸入的S盒32位二進位制祕鑰被替換成如下二進位制資料 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 0 1 0 0 0 1 0 1 1 0 0 0 0 1 1 1 0 ======================================== 第6次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是P盒置換前作為輸入的明文左部分32位二進位制資料是 ======================================== [0, 0, 0, 0] [0, 1, 0, 1] [0, 1, 0, 1] [0, 1, 0, 0] [1, 1, 1, 0] [0, 1, 0, 1] [0, 0, 1, 0] [1, 1, 0, 1] 第 7 次迭代運算(F函式)原子金鑰(上)及經E擴充套件的48位R0二進位制碼(中)及二者異或後的結果(下) 0 0 1 0 1 1 1 1 1 1 0 1 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 0 1 0 1 1 0 1 0 1 0 1 0 1 1 0 1 1 0 1 1 1 1 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0 0 0 0 1 1 0 1 0 1 1 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 0 0 1 0 1 0 0 1 0 1 1 0 0 0 1 ======================================== 第7次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是 ======================================== [0, 1, 1, 0] [1, 0, 1, 0] [1, 1, 1, 1] [1, 1, 1, 0] [1, 0, 0, 1] [1, 0, 0, 1] [1, 1, 0, 0] [1, 1, 1, 1] 第 7 次迭代運算(F函式)中P盒置換後作為輸入的S盒32位二進位制祕鑰被替換成如下二進位制資料 0 1 1 1 1 1 0 1 0 1 0 1 1 0 1 1 1 0 1 1 1 0 1 1 0 1 1 0 0 1 0 1 ======================================== 第7次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是P盒置換前作為輸入的明文左部分32位二進位制資料是 ======================================== [1, 1, 1, 1] [0, 0, 0, 0] [1, 0, 1, 1] [0, 0, 1, 0] [1, 1, 0, 0] [0, 1, 0, 0] [0, 0, 0, 1] [1, 0, 1, 1] 第 8 次迭代運算(F函式)原子金鑰(上)及經E擴充套件的48位R0二進位制碼(中)及二者異或後的結果(下) 0 0 1 1 1 1 1 1 0 1 0 1 1 0 0 1 1 1 0 1 1 0 1 1 0 0 0 0 1 1 1 1 0 1 0 0 1 0 1 1 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 1 0 1 1 1 0 0 1 1 0 1 0 0 0 1 0 0 1 1 0 1 1 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 1 1 0 ======================================== 第8次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是 ======================================== [0, 1, 1, 1] [0, 0, 0, 1] [0, 1, 0, 0] [0, 1, 1, 0] [0, 1, 1, 1] [0, 0, 1, 0] [1, 1, 0, 1] [1, 1, 1, 0] 第 8 次迭代運算(F函式)中P盒置換後作為輸入的S盒32位二進位制祕鑰被替換成如下二進位制資料 0 0 1 0 1 0 1 0 0 1 1 1 0 1 1 1 1 1 0 1 0 0 1 0 1 0 1 0 0 0 1 1 ======================================== 第8次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是P盒置換前作為輸入的明文左部分32位二進位制資料是 ======================================== [0, 1, 1, 0] [1, 0, 1, 0] [1, 1, 1, 1] [1, 1, 1, 0] [1, 0, 0, 1] [1, 0, 0, 1] [1, 1, 0, 0] [1, 1, 1, 1] 第 9 次迭代運算(F函式)原子金鑰(上)及經E擴充套件的48位R0二進位制碼(中)及二者異或後的結果(下) 0 0 0 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 0 1 1 0 0 1 0 0 1 1 0 1 0 0 0 1 1 0 1 1 1 1 0 1 1 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 1 0 0 1 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 1 0 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 0 1 0 0 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 1 0 1 0 ======================================== 第9次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是 ======================================== [0, 0, 0, 1] [1, 1, 0, 0] [0, 1, 1, 1] [1, 1, 1, 1] [0, 0, 0, 1] [0, 0, 0, 0] [0, 0, 1, 1] [1, 1, 0, 0] 第 9 次迭代運算(F函式)中P盒置換後作為輸入的S盒32位二進位制祕鑰被替換成如下二進位制資料 1 0 1 0 1 1 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 1 0 0 0 1 1 1 0 1 1 0 ======================================== 第9次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是P盒置換前作為輸入的明文左部分32位二進位制資料是 ======================================== [0, 1, 1, 1] [0, 0, 0, 1] [0, 1, 0, 0] [0, 1, 1, 0] [0, 1, 1, 1] [0, 0, 1, 0] [1, 1, 0, 1] [1, 1, 1, 0] 第 10 次迭代運算(F函式)原子金鑰(上)及經E擴充套件的48位R0二進位制碼(中)及二者異或後的結果(下) 0 0 0 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 0 1 1 0 0 0 1 0 0 0 0 1 0 1 0 1 1 0 0 1 1 0 1 1 1 1 1 1 1 0 1 0 0 0 0 1 0 1 1 1 1 0 1 0 1 1 0 0 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1 0 1 1 1 0 0 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 0 1 1 0 1 0 0 1 1 0 1 0 1 0 1 1 1 0 1 0 0 0 0 0 1 1 1 ======================================== 第10次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是 ======================================== [0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 0] [1, 0, 0, 0] [0, 0, 0, 0] [1, 1, 0, 1] [0, 1, 1, 0] [1, 0, 0, 0] 第 10 次迭代運算(F函式)中P盒置換後作為輸入的S盒32位二進位制祕鑰被替換成如下二進位制資料 0 1 0 1 1 0 0 0 0 0 0 1 1 0 0 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 ======================================== 第10次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是P盒置換前作為輸入的明文左部分32位二進位制資料是 ======================================== [0, 0, 0, 1] [1, 1, 0, 0] [0, 1, 1, 1] [1, 1, 1, 1] [0, 0, 0, 1] [0, 0, 0, 0] [0, 0, 1, 1] [1, 1, 0, 0] 第 11 次迭代運算(F函式)原子金鑰(上)及經E擴充套件的48位R0二進位制碼(中)及二者異或後的結果(下) 0 0 0 1 1 1 1 1 0 1 1 0 1 1 0 1 1 1 0 0 1 1 0 1 1 1 0 0 0 1 0 1 1 1 1 0 0 1 1 0 1 1 0 1 1 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 1 0 1 0 1 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 0 1 1 1 0 1 1 0 1 0 ======================================== 第11次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是 ======================================== [0, 0, 0, 1] [1, 1, 1, 1] [0, 1, 0, 1] [1, 1, 0, 1] [0, 0, 1, 1] [0, 1, 0, 0] [1, 1, 1, 1] [0, 0, 0, 0] 第 11 次迭代運算(F函式)中P盒置換後作為輸入的S盒32位二進位制祕鑰被替換成如下二進位制資料 1 1 1 0 0 1 1 0 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 0 1 1 0 1 1 0 1 1 ======================================== 第11次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是P盒置換前作為輸入的明文左部分32位二進位制資料是 ======================================== [0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 0] [1, 0, 0, 0] [0, 0, 0, 0] [1, 1, 0, 1] [0, 1, 1, 0] [1, 0, 0, 0] 第 12 次迭代運算(F函式)原子金鑰(上)及經E擴充套件的48位R0二進位制碼(中)及二者異或後的結果(下) 0 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 0 1 1 0 1 0 0 1 1 1 1 0 1 1 0 1 1 0 1 1 0 0 1 0 0 1 1 0 1 1 1 1 1 0 1 0 1 0 0 1 1 1 1 1 1 1 0 1 0 0 0 1 0 1 0 1 0 1 1 1 1 0 0 1 1 1 1 0 1 1 0 1 0 0 1 1 1 1 0 1 0 1 1 1 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 1 0 1 0 0 0 1 0 1 1 1 1 1 0 1 0 1 0 ======================================== 第12次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是 ======================================== [1, 0, 0, 1] [1, 0, 1, 0] [0, 1, 1, 0] [0, 0, 1, 1] [0, 0, 0, 1] [0, 0, 1, 0] [0, 1, 1, 1] [1, 1, 0, 0] 第 12 次迭代運算(F函式)中P盒置換後作為輸入的S盒32位二進位制祕鑰被替換成如下二進位制資料 1 1 1 0 1 0 1 0 1 1 1 1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 1 1 0 ======================================== 第12次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是P盒置換前作為輸入的明文左部分32位二進位制資料是 ======================================== [0, 0, 0, 1] [1, 1, 1, 1] [0, 1, 0, 1] [1, 1, 0, 1] [0, 0, 1, 1] [0, 1, 0, 0] [1, 1, 1, 1] [0, 0, 0, 0] 第 13 次迭代運算(F函式)原子金鑰(上)及經E擴充套件的48位R0二進位制碼(中)及二者異或後的結果(下) 1 1 0 1 1 0 0 1 1 0 1 0 1 1 0 1 1 0 1 0 1 1 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 1 0 0 1 1 1 0 0 1 1 0 0 1 1 1 1 0 1 0 1 0 1 1 1 1 0 1 0 0 0 0 1 0 0 0 0 0 0 1 1 0 1 0 0 0 0 1 0 1 1 0 1 0 1 0 1 1 0 1 1 0 1 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 1 0 0 1 0 1 1 0 1 0 0 0 0 0 1 1 0 0 0 0 1 0 0 1 0 0 1 0 1 1 ======================================== 第13次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是 ======================================== [1, 1, 0, 1] [1, 0, 1, 1] [0, 0, 0, 0] [0, 0, 0, 0] [1, 0, 1, 0] [0, 1, 1, 0] [0, 1, 0, 0] [0, 0, 1, 1] 第 13 次迭代運算(F函式)中P盒置換後作為輸入的S盒32位二進位制祕鑰被替換成如下二進位制資料 0 1 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 0 1 0 0 0 1 0 0 0 1 0 1 0 ======================================== 第13次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是P盒置換前作為輸入的明文左部分32位二進位制資料是 ======================================== [1, 0, 0, 1] [1, 0, 1, 0] [0, 1, 1, 0] [0, 0, 1, 1] [0, 0, 0, 1] [0, 0, 1, 0] [0, 1, 1, 1] [1, 1, 0, 0] 第 14 次迭代運算(F函式)原子金鑰(上)及經E擴充套件的48位R0二進位制碼(中)及二者異或後的結果(下) 1 1 0 1 0 0 0 1 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 1 0 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 0 1 1 1 1 0 1 0 1 0 1 1 1 1 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 1 0 1 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 0 0 0 1 1 1 0 1 1 1 0 0 0 0 0 0 0 1 0 1 0 ======================================== 第14次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是 ======================================== [0, 1, 1, 1] [0, 1, 0, 0] [1, 1, 0, 1] [0, 1, 0, 0] [0, 1, 1, 0] [0, 0, 0, 0] [0, 0, 0, 1] [1, 1, 1, 1] 第 14 次迭代運算(F函式)中P盒置換後作為輸入的S盒32位二進位制祕鑰被替換成如下二進位制資料 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 1 1 0 1 1 1 0 1 1 0 0 1 0 ======================================== 第14次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是P盒置換前作為輸入的明文左部分32位二進位制資料是 ======================================== [1, 1, 0, 1] [1, 0, 1, 1] [0, 0, 0, 0] [0, 0, 0, 0] [1, 0, 1, 0] [0, 1, 1, 0] [0, 1, 0, 0] [0, 0, 1, 1] 第 15 次迭代運算(F函式)原子金鑰(上)及經E擴充套件的48位R0二進位制碼(中)及二者異或後的結果(下) 1 1 1 1 0 0 0 1 1 0 1 1 1 1 1 0 1 0 1 0 0 1 1 0 1 0 1 1 1 1 1 0 0 1 1 0 1 1 0 0 1 1 0 1 0 0 0 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 0 0 0 1 1 0 0 0 1 1 0 1 1 0 0 0 1 0 1 1 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 1 1 0 1 0 0 1 1 0 1 1 1 0 0 1 0 ======================================== 第15次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是 ======================================== [0, 0, 0, 1] [1, 0, 1, 1] [0, 1, 0, 0] [1, 1, 0, 0] [0, 1, 1, 1] [0, 0, 1, 1] [0, 0, 0, 1] [0, 1, 1, 0] 第 15 次迭代運算(F函式)中P盒置換後作為輸入的S盒32位二進位制祕鑰被替換成如下二進位制資料 0 1 1 0 0 0 1 0 0 0 1 0 1 1 1 1 0 1 1 1 0 0 0 0 1 1 1 0 0 0 1 0 ======================================== 第15次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是P盒置換前作為輸入的明文左部分32位二進位制資料是 ======================================== [0, 1, 1, 1] [0, 1, 0, 0] [1, 1, 0, 1] [0, 1, 0, 0] [0, 1, 1, 0] [0, 0, 0, 0] [0, 0, 0, 1] [1, 1, 1, 1] 第 16 次迭代運算(F函式)原子金鑰(上)及經E擴充套件的48位R0二進位制碼(中)及二者異或後的結果(下) 1 1 1 1 0 0 0 0 1 0 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 0 0 1 1 0 0 1 1 1 0 0 0 0 1 1 1 0 1 1 1 1 0 0 0 1 0 1 0 1 1 0 1 0 1 1 1 1 1 1 1 0 1 1 0 1 0 0 0 1 0 1 0 0 0 0 1 0 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 1 0 1 0 0 1 1 0 1 0 0 1 1 1 0 1 1 0 0 0 0 1 1 0 1 0 0 1 0 0 1 0 1 1 1 1 1 0 0 0 1 1 0 1 ======================================== 第16次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是 ======================================== [0, 1, 1, 1] [1, 0, 1, 1] [0, 0, 0, 0] [1, 0, 1, 1] [0, 0, 0, 0] [1, 1, 0, 1] [0, 0, 1, 0] [0, 1, 1, 1] 第 16 次迭代運算(F函式)中P盒置換後作為輸入的S盒32位二進位制祕鑰被替換成如下二進位制資料 1 1 0 1 0 0 0 0 0 1 0 0 1 0 1 0 1 1 1 0 1 1 1 0 0 1 1 0 1 0 1 0 ======================================== 第16次迭代運算(F函式)中P盒置換前作為輸入的S盒32位二進位制祕鑰是P盒置換前作為輸入的明文左部分32位二進位制資料是 ======================================== [0, 0, 0, 1] [1, 0, 1, 1] [0, 1, 0, 0] [1, 1, 0, 0] [0, 1, 1, 1] [0, 0, 1, 1] [0, 0, 0, 1] [0, 1, 1, 0] ======================================== 明文和密碼經十六輪F函式迭代後最終結果 ======================================== [0, 1, 1, 1, 1, 0, 1, 1] [0, 0, 0, 0, 1, 0, 1, 1] [0, 0, 0, 0, 1, 1, 0, 1] [0, 0, 1, 0, 0, 1, 1, 1] [1, 1, 0, 0, 1, 0, 1, 1] [0, 0, 0, 0, 0, 1, 1, 0] [1, 0, 0, 1, 1, 1, 0, 1] [0, 1, 1, 1, 1, 1, 0, 0] ======================================== 明文經過祕鑰通過DES加密演算法最終生成以下密文 ======================================== [1, 1, 0, 1, 1, 1, 0, 1] [1, 1, 1, 1, 0, 0, 0, 1] [0, 0, 1, 0, 1, 1, 1, 1] [1, 1, 0, 1, 1, 1, 1, 0] [0, 1, 0, 0, 1, 0, 1, 0] [0, 1, 0, 0, 0, 0, 1, 1] [1, 1, 0, 0, 0, 0, 1, 0] [1, 0, 0, 0, 1, 0, 0, 0] 密文轉為ASCII碼為 Ýñ/ÞJCÂ Process finished with exit code 0