Python密碼學(xué)編程 第2版(異步圖書(shū)出品)
定 價(jià):89 元
- 作者:[美] 阿爾·斯維加特(Al Sweigart) 著,鄭新芳,趙怡翾 譯
- 出版時(shí)間:2020/4/1
- ISBN:9787115529992
- 出 版 社:人民郵電出版社
- 中圖法分類:TP311.561
- 頁(yè)碼:330
- 紙張:膠版紙
- 版次:2
- 開(kāi)本:16開(kāi)
自互聯(lián)網(wǎng)面世以來(lái),網(wǎng)絡(luò)安全一直是人們所重視的問(wèn)題。從20世紀(jì)中葉開(kāi)始,流傳千百年的密碼算法紛紛被投入到了網(wǎng)絡(luò)安全的應(yīng)用中;隨后,在20世紀(jì)70年代,與古典密碼完全不同的密碼體制——公鑰密碼算法橫空出世,密碼學(xué)的發(fā)展完成了一次飛躍。
Python誕生于20世紀(jì)90年代,它是一種面向?qū)ο笳Z(yǔ)言特點(diǎn)與解釋型語(yǔ)言特點(diǎn)相結(jié)合的高級(jí)程序設(shè)計(jì)語(yǔ)言,已經(jīng)得到了大規(guī)模應(yīng)用。本書(shū)將Python語(yǔ)言與密碼學(xué)結(jié)合起來(lái),從簡(jiǎn)單的古典密碼算法開(kāi)始,一直到公鑰密碼算法,進(jìn)行了簡(jiǎn)潔而細(xì)致的說(shuō)明與解讀。每一種密碼算法的講解包括原理部分、實(shí)現(xiàn)部分和破解部分(公鑰算法不包括破解部分),其中后兩者附有詳細(xì)的Python代碼,注釋簡(jiǎn)潔明了,可讀性極高。每章的末尾還提供了一些習(xí)題,幫助讀者鞏固所學(xué)知識(shí)并進(jìn)行深入理解。
本書(shū)適合任何想要學(xué)習(xí)Python編程并對(duì)密碼學(xué)抱有興趣的讀者。本書(shū)對(duì)Python編程的基礎(chǔ)要求不高,初學(xué)者可以放心地閱讀本書(shū)。相信本書(shū)一定能夠?yàn)樽x者帶來(lái)**的閱讀體驗(yàn)。
本書(shū)是學(xué)習(xí)用Python編程實(shí)現(xiàn)加密算法的初學(xué)者指南
本書(shū)附帶示例源代碼,幫助讀者學(xué)以致用
本書(shū)配有課后習(xí)題及答案,可幫助讀者加深知識(shí)理解
通過(guò)閱讀本書(shū),您將學(xué)習(xí)如何通過(guò) Python 編程制作和破解密碼,以此創(chuàng)建和發(fā)送密文!學(xué)習(xí) Python 編程的基礎(chǔ) 知識(shí)之后,您將從使用反向和凱撒密碼的簡(jiǎn)單程序開(kāi)始,了解為公開(kāi)密鑰加密的方法,該加密方法用于保護(hù)在線事務(wù)的 正常運(yùn)作,包括數(shù)字簽名和電子郵件。另外,您還將學(xué)習(xí)如何使用經(jīng)典密碼(如置換密碼和維吉尼亞密碼)對(duì)文本進(jìn)行加密。 每個(gè)程序都包含完整的代碼和逐行說(shuō)明。本書(shū)結(jié)尾,您將學(xué)習(xí)如何使用 Python 進(jìn)行編碼。
您還將學(xué)習(xí)以下內(nèi)容:
將循環(huán)、變量和流控制語(yǔ)句組合到實(shí)際的工作程序中;
使用字典文件檢測(cè)解密的消息是有效的英文還是亂碼;
創(chuàng)建并測(cè)試程序以確保代碼正確加密和解密;
對(duì)仿射密碼進(jìn)行編碼(破解)的示例(使用模塊化算術(shù)對(duì)消息進(jìn)行加密);
使用暴力算法和頻率分析等技術(shù)破解密碼。
阿爾·斯維加特(Al Sweigart)是一位專業(yè)的軟件開(kāi)發(fā)人員,他專注于兒童和成人編程項(xiàng)目。他編寫了《Python游戲編程快速上手》《Python和Pygame游戲開(kāi)發(fā)指南》《Python密碼學(xué)編程》《Python編程快速上手——讓繁瑣工作自動(dòng)化》等圖書(shū),深受讀者歡迎。
第 1章 制作紙質(zhì)密碼學(xué)工具 1
1.1 什么是密碼學(xué) 1
1.2 編碼與密碼 2
1.3 凱撒密碼 3
1.3.1 密碼輪 3
1.3.2 使用密碼輪進(jìn)行加密 4
1.3.3 使用密碼輪進(jìn)行解密 5
1.3.4 通過(guò)計(jì)算進(jìn)行加密和解密 5
1.4 為什么加密兩次不起作用 6
1.5 小結(jié) 7
1.6 習(xí)題 7
第 2章 在交互式運(yùn)行環(huán)境中編程 8
2.1 簡(jiǎn)單的數(shù)學(xué)表達(dá)式 8
2.2 整型和浮點(diǎn)數(shù)的值 9
2.3 表達(dá)式 10
2.4 運(yùn)算順序 10
2.5 計(jì)算表達(dá)式的值 10
2.6 用變量存儲(chǔ)數(shù)值 12
2.7 重寫變量 13
2.8 變量名 14
2.9 小結(jié) 14
2.10 習(xí)題 15
第3章 字符串及編寫程序 16
3.1 用字符串的值處理文本 16
3.1.1 “+”運(yùn)算符實(shí)現(xiàn)字符串拼接 17
3.1.2 “*”運(yùn)算符實(shí)現(xiàn)字符串復(fù)制 18
3.1.3 通過(guò)索引獲得字符串中的字符 18
3.2 用print()函數(shù)打印值 21
3.3 打印轉(zhuǎn)義字符 22
3.4 引號(hào)和雙引號(hào) 23
3.5 在集成開(kāi)發(fā)環(huán)境的文件編輯器中編寫程序 23
3.6 “Hello, World!”程序的源代碼 24
3.7 使用在線比較工具檢查源代碼 25
3.8 通過(guò)集成開(kāi)發(fā)環(huán)境保存程序 26
3.8.1 保存程序 26
3.8.2 運(yùn)行程序 26
3.8.3 打開(kāi)保存的程序 27
3.9 “Hello, World! ”程序如何工作 27
3.9.1 注釋 28
3.9.2 打印指示信息 28
3.9.3 接收輸入 28
3.9.4 完成程序 29
3.10 小結(jié) 29
3.11 習(xí)題 30
第4章 反向密碼 31
4.1 反向密碼程序的源代碼 31
4.2 反向密碼程序的執(zhí)行結(jié)果樣例 32
4.3 設(shè)置注釋及變量 32
4.4 確定字符串的長(zhǎng)度 33
4.5 while循環(huán) 33
4.6 Boolean數(shù)據(jù)類型 34
4.7 比較操作符 34
4.8 代碼塊 36
4.9 while循環(huán)語(yǔ)句 37
4.10 “增長(zhǎng)”字符串 38
4.11 用input()提示改進(jìn)程序 40
4.12 小結(jié) 41
4.13 習(xí)題 41
第5章 凱撒密碼 42
5.1 凱撒密碼程序的源代碼 42
5.2 凱撒密碼程序樣例運(yùn)行 43
5.3 導(dǎo)入模塊并創(chuàng)建變量 44
5.4 常量和變量 45
5.5 for循環(huán)語(yǔ)句 45
5.5.1 for循環(huán)的示例 46
5.5.2 等價(jià)于for循環(huán)的while循環(huán) 46
5.6 if語(yǔ)句 47
5.6.1 if語(yǔ)句的示例 47
5.6.2 else語(yǔ)句 48
5.6.3 elif語(yǔ)句 48
5.7 in和not in運(yùn)算符 49
5.8 find()字符串方法 50
5.9 符號(hào)加密和解密 51
5.9.1 實(shí)現(xiàn)“回環(huán)” 51
5.9.2 處理符號(hào)集以外的符號(hào) 52
5.10 顯示和復(fù)制translated字符串 52
5.11 加密其他字符 53
5.12 小結(jié) 53
5.13 習(xí)題 54
第6章 用暴力算法破解凱撒密碼 56
6.1 破解凱撒密碼的源代碼 56
6.2 運(yùn)行凱撒密碼破解程序的樣例 57
6.3 設(shè)置變量 58
6.4 在循環(huán)中使用range()方法 58
6.5 解密消息 59
6.6 使用字符串標(biāo)準(zhǔn)化輸出密鑰及
解密后的信息 60
6.7 小結(jié) 61
6.8 習(xí)題 62
第7章 通過(guò)置換密碼實(shí)現(xiàn)加密 63
7.1 置換密碼如何工作 63
7.1.1 手動(dòng)加密消息 64
7.1.2 創(chuàng)建加密程序 65
7.2 置換密碼加密程序的源代碼 66
7.3 置換密碼加密程序的示例運(yùn)行 67
7.4 用def語(yǔ)句創(chuàng)建自定義函數(shù) 67
7.4.1 定義用形參接收實(shí)參的函數(shù) 68
7.4.2 更改僅存在于函數(shù)中的形參 68
7.4.3 定義main()函數(shù) 69
7.5 以參數(shù)形式傳遞密鑰和消息 70
7.6 數(shù)據(jù)類型:列表 70
7.6.1 對(duì)列表中的項(xiàng)重新賦值 71
7.6.2 多級(jí)列表 72
7.6.3 對(duì)列表使用len()和in運(yùn)算符 72
7.6.4 用+和*運(yùn)算符連接和復(fù)制列表 73
7.7 置換加密算法 74
7.8 增量賦值運(yùn)算符 75
7.9 隨消息移動(dòng)currentIndex 75
7.10 join()字符串方法 77
7.11 返回值和返回語(yǔ)句 77
7.11.1 return語(yǔ)句示例 78
7.11.2 返回加密得到的密文 78
7.12 __name__變量 78
7.13 小結(jié) 79
7.14 習(xí)題 80
第8章 解密置換密碼 81
8.1 如何在紙上解密置換密碼 81
8.2 置換密碼解密程序的源代碼 82
8.3 運(yùn)行置換密碼解密程序的樣例 84
8.4 導(dǎo)入模塊并創(chuàng)建主函數(shù) 84
8.5 使用密鑰解密消息 84
8.5.1 round()、math.ceil()和math.floor()方法 85
8.5.2 decryptMessage()函數(shù) 86
8.5.3 布爾操作符 87
8.5.4 使用and和or操作符往往是一條捷徑 89
8.5.5 布爾操作符的運(yùn)算順序 90
8.5.6 調(diào)整變量column和row的值 90
8.6 調(diào)用main()函數(shù) 92
8.7 小結(jié) 92
8.8 習(xí)題 92
第9章 編寫測(cè)試程序 94
9.1 置換密碼測(cè)試程序的源代碼 94
9.2 運(yùn)行置換密碼測(cè)試程序的示例 95
9.3 導(dǎo)入模塊 96
9.4 生成偽隨機(jī)數(shù) 96
9.5 創(chuàng)建隨機(jī)字符串 97
9.5.1 將字符串復(fù)制隨機(jī)次 98
9.5.2 列表變量使用引用 98
9.5.3 傳遞引用 101
9.5.4 使用copy.deepcopy()復(fù)制列表 101
9.5.5 random.shuffle()函數(shù) 101
9.5.6 隨機(jī)打亂字符串 102
9.6 測(cè)試消息 102
9.7 檢查密碼程序是否正常工作并
結(jié)束程序 103
9.8 調(diào)用main()函數(shù) 104
9.9 檢驗(yàn)測(cè)試程序 104
9.10 小結(jié) 104
9.11 習(xí)題 105
第 10章 文件的加密與解密 106
10.1 純文本文件 106
10.2 使用置換密碼加密文件的
源代碼 107
10.3 運(yùn)行置換密碼加密文件程序的
樣例 108
10.4 文件操作 109
10.4.1 打開(kāi)文件 109
10.4.2 數(shù)據(jù)寫入及文件關(guān)閉 109
10.4.3 讀取文件 110
10.5 創(chuàng)建main()函數(shù) 111
10.6 檢查文件是否存在 111
10.6.1 os.path.exists() 方法 111
10.6.2 使用os.path.exists()方法檢查
輸入的文件是否存在 112
10.7 使用字符串方法令用戶的輸入
更靈活 112
10.7.1 upper()、lower()和title()字符串
方法 112
10.7.2 startswith()和endswith()方法 113
10.7.3 在程序中使用上述字符串方法 113
10.8 讀取作為輸入的文件 114
10.9 計(jì)算加/解密所需的時(shí)間 114
10.9.1 time模塊和time.time()方法 114
10.9.2 在程序中使用time.time()方法 115
10.10 將輸出寫入文件 115
10.11 調(diào)用main()函數(shù) 116
10.12 小結(jié) 116
10.13 習(xí)題 117
第 11章 編程檢測(cè)英語(yǔ)文本 118
11.1 計(jì)算機(jī)如何理解英語(yǔ) 118
11.2 英語(yǔ)檢測(cè)模塊的源代碼 120
11.3 英語(yǔ)檢測(cè)模塊的運(yùn)行示例 121
11.4 指令和設(shè)置常量 121
11.5 字典數(shù)據(jù)類型 122
11.5.1 字典和列表之間的區(qū)別 123
11.5.2 在字典中添加或更改項(xiàng) 123
11.5.3 對(duì)字典使用len()函數(shù) 124
11.5.4 對(duì)字典使用in運(yùn)算符 124
11.5.5 用字典檢索項(xiàng)比用列表更快 125
11.5.6 在字典上使用循環(huán) 125
11.6 運(yùn)行字典文件 125
11.6.1 split()方法 126
11.6.2 將字典文件分割成單個(gè)單詞 126
11.6.3 返回字典數(shù)據(jù) 127
11.7 對(duì)消息中出現(xiàn)的英文單詞進(jìn)行
計(jì)數(shù) 127
11.7.1 除數(shù)為零錯(cuò)誤 128
11.7.2 對(duì)匹配上的英語(yǔ)單詞進(jìn)行計(jì)數(shù) 128
11.7.3 float()、int()和str()函數(shù)及整數(shù)
除法 129
11.7.4 獲得message中英語(yǔ)單詞的
比例 129
11.8 刪除非字母字符 130
11.8.1 append()列表方法 130
11.8.2 創(chuàng)建字母組成的字符串 131
11.9 檢測(cè)英語(yǔ)單詞 131
11.9.1 使用默認(rèn)參數(shù) 132
11.9.2 計(jì)算百分比 132
11.10 小結(jié) 134
11.11 習(xí)題 134
第 12章 破解置換密碼 136
12.1 破解置換密碼程序的源代碼 136
12.2 運(yùn)行破解置換密碼程序的樣例 137
12.3 導(dǎo)入模塊 138
12.4 使用三引號(hào)的多行字符串 138
12.5 展示破解密文的結(jié)果 139
12.6 得到破解后的消息 140
12.6.1 strip()字符串方法 141
12.6.2 應(yīng)用strip()字符串方法 142
12.6.3 破解失敗 142
12.7 調(diào)用main()函數(shù) 143
12.8 小結(jié) 143
12.9 習(xí)題 143
第 13章 仿射密碼的模運(yùn)算模塊 144
13.1 模運(yùn)算 144
13.2 模運(yùn)算符 145
13.3 尋找因子并計(jì)算最大公約數(shù) 146
13.4 多重賦值 147
13.5 歐幾里得算法求最大公約數(shù) 148
13.6 理解乘法和仿射密碼的工作
原理 149
13.6.1 為乘法密碼選擇有效的密鑰 150
13.6.2 仿射密碼加密 150
13.6.3 仿射密碼解密 151
13.6.4 計(jì)算模逆 152
13.6.5 整數(shù)除法運(yùn)算符 152
13.7 Cryptomath模塊的源代碼 153
13.8 小結(jié) 154
13.9 習(xí)題 154
第 14章 編寫仿射密碼 155
14.1 仿射密碼程序的源代碼 155
14.2 運(yùn)行仿射密碼程序的樣例 157
14.3 引入模塊、設(shè)置常量并創(chuàng)建
main()函數(shù) 157
14.4 計(jì)算并驗(yàn)證密鑰 158
14.4.1 元組數(shù)據(jù)類型 159
14.4.2 檢驗(yàn)弱密鑰 159
14.4.3 仿射密碼共有多少種密鑰組合 160
14.5 編寫加密函數(shù) 162
14.6 編寫解密函數(shù) 163
14.7 生成隨機(jī)密鑰對(duì) 164
14.8 調(diào)用main()函數(shù) 164
14.9 小結(jié) 165
14.10 習(xí)題 165
第 15章 破解仿射密碼 166
15.1 仿射密碼破解程序的源代碼 166
15.2 仿射密碼破解程序的運(yùn)行示例 167
15.3 創(chuàng)建模塊、常量和main()函數(shù) 168
15.4 仿射密碼破解函數(shù) 169
15.4.1 乘方運(yùn)算符 169
15.4.2 計(jì)算可能密鑰的總數(shù) 169
15.4.3 continue語(yǔ)句 170
15.4.4 使用continue跳過(guò)代碼 171
15.5 調(diào)用main()函數(shù) 172
15.6 小結(jié) 172
15.7 習(xí)題 173
第 16章 編寫簡(jiǎn)單代換密碼 174
16.1 簡(jiǎn)單代換密碼的工作原理 174
16.2 簡(jiǎn)單代換密碼程序的源代碼 175
16.3 運(yùn)行簡(jiǎn)單代換密碼程序的樣例 177
16.4 引入模塊、設(shè)置常量、創(chuàng)建
main()函數(shù) 177
16.5 sort()列表方法 179
16.6 包裹函數(shù) 179
16.7 translateMessage()函數(shù) 181
16.7.1 isupper()和islower()字符串
方法 182
16.7.2 用isupper()保留字符原大小寫
形式 183
16.8 生成隨機(jī)密鑰 184
16.9 調(diào)用main()函數(shù) 184
16.10 小結(jié) 185
16.11 習(xí)題 185
第 17章 破解簡(jiǎn)單代換密碼 186
17.1 使用單詞模式進(jìn)行解密 186
17.1.1 尋找單詞模式 187
17.1.2 尋找可能解密字母 187
17.2 破解程序總覽 188
17.3 單詞模式模塊 189
17.4 簡(jiǎn)單代換破解程序的源代碼 190
17.5 簡(jiǎn)單代換破解程序的運(yùn)行示例 193
17.6 創(chuàng)建模塊和常量 193
17.7 用正則表達(dá)式查找字符 194
17.8 創(chuàng)建main()函數(shù) 194
17.9 向用戶顯示破解結(jié)果 195
17.10 創(chuàng)建密文映射 195
17.10.1 創(chuàng)建空映射 196
17.10.2 向映射添加字母 196
17.10.3 取兩個(gè)映射的交集 197
17.10.4 字母映射輔助函數(shù)的工作
原理 198
17.10.5 識(shí)別映射中已確定的明文
字母 201
17.10.6 測(cè)試removeSolvedLetterFrom-
Mapping()函數(shù) 203
17.11 hackSimpleSub()函數(shù) 203
17.11.1 replace()字符串方法 205
17.11.2 解密消息 205
17.11.3 在交互式運(yùn)行環(huán)境中進(jìn)行
解密 206
17.12 調(diào)用main()函數(shù) 207
17.13 小結(jié) 208
17.14 習(xí)題 208
第 18章 編寫維吉尼亞密碼 209
18.1 在維吉尼亞密碼中使用多字母
密鑰 209
18.1.1 密鑰越長(zhǎng),維吉尼亞密碼越
安全 211
18.1.2 選擇一把抗字典攻擊的密鑰 212
18.2 維吉尼亞密碼實(shí)現(xiàn)程序的源
代碼 212
18.3 運(yùn)行維吉尼亞密碼實(shí)現(xiàn)程序的
樣例 214
18.4 引入模塊、設(shè)置常量和創(chuàng)建
main()函數(shù) 214
18.5 使用List-Append-Join模式
生成字符串 215
18.6 消息的加密與解密 216
18.7 調(diào)用main()函數(shù) 218
18.8 小結(jié) 218
18.9 習(xí)題 219
第 19章 頻率分析 220
19.1 分析文本中的字母頻率 220
19.2 匹配字母頻率 222
19.2.1 計(jì)算簡(jiǎn)單代換密碼的頻率匹配
分?jǐn)?shù) 222
19.2.2 計(jì)算置換密碼的頻率匹配分?jǐn)?shù) 223
19.2.3 對(duì)維吉尼亞密碼進(jìn)行頻率分析 224
19.3 計(jì)算字母頻率的源碼 224
19.4 以“ETAOIN”順序保存字母 226
19.5 對(duì)消息中的字母進(jìn)行計(jì)數(shù) 227
19.6 獲取元組的第 一個(gè)成員 228
19.7 將消息中的字母按頻率大小
排序 228
19.7.1 getLetterCount()完成字母
計(jì)數(shù) 229
19.7.2 創(chuàng)建字典存儲(chǔ)頻率和字母列表 229
19.7.3 按ETAOIN順序排序字母列表 230
19.7.4 字典列表按頻率大小排序 233
19.7.5 創(chuàng)建列表存儲(chǔ)排序后的字母 235
19.8 計(jì)算消息的頻率匹配分?jǐn)?shù) 235
19.9 小結(jié) 236
19.10 習(xí)題 237
第 20章 破解維吉尼亞密碼 238
20.1 運(yùn)用字典式攻擊暴力破解維吉尼亞密碼 238
20.2 維吉尼亞密碼字典式破解程序的
源代碼 238
20.3 維吉尼亞密碼字典式破解程序的
運(yùn)行樣例 239
20.4 關(guān)于維吉尼亞密碼破解程序 240
20.5 運(yùn)用Kasiski檢測(cè)確定密鑰
長(zhǎng)度 240
20.5.1 找到重復(fù)序列 240
20.5.2 求得間隔的因子 241
20.5.3 提取字符串的每個(gè)第N位
字母 242
20.5.4 使用頻率分析法逐個(gè)破解
子密鑰 243
20.5.5 暴力破解可能密鑰 245
20.6 維吉尼亞密碼破解程序的源
代碼 246
20.7 維吉尼亞密碼破解程序的運(yùn)行
樣例 251
20.8 引入模塊、設(shè)置常量和創(chuàng)建
main()函數(shù) 251
20.9 尋找重復(fù)序列 252
20.10 求得間隔數(shù)的因子 254
20.10.1 通過(guò)set()函數(shù)去除重復(fù)元素 255
20.10.2 移除重復(fù)因子并對(duì)列表進(jìn)行
排序 256
20.10.3 找到出現(xiàn)次數(shù)最多的因子 256
20.11 找到最可能的密鑰長(zhǎng)度 258
20.11.1 extend()列表方法 258
20.11.2 擴(kuò)展repeatedSeqSpacings
字典 259
20.11.3 從factorByCount中獲取因子 259
20.12 找到由相同子密鑰加密的
字母 260
20.13 嘗試用可能的密鑰長(zhǎng)度進(jìn)行
解密 261
20.13.1 print()的end關(guān)鍵字參數(shù) 263
20.13.2 以沉默模式執(zhí)行程序或打印
信息 263
20.13.3 確定子密鑰的可能組合 264
20.13.4 以正確的大小寫形式打印解密
后的文本 267
20.14 返回破解后的消息 268
20.14.1 找到可能密鑰后跳出循環(huán) 268
20.14.2 用其他所有可能密鑰長(zhǎng)度進(jìn)行
暴力破解 269
20.15 調(diào)用main()函數(shù) 269
20.16 改變破解程序中的常量 269
20.17 小結(jié) 270
20.18 習(xí)題 271
第 21章 一次一密 272
21.1 不可破解的一次一密 272
21.1.1 密鑰長(zhǎng)度等于消息長(zhǎng)度 272
21.1.2 使密鑰真正隨機(jī) 274
21.1.3 避免兩次一密 274
21.2 為什么兩次一密是維吉尼亞
密碼 275
21.3 小結(jié) 276
21.4 習(xí)題 276
第 22章 素?cái)?shù)的查找與生成 277
22.1 什么是素?cái)?shù) 277
22.2 素?cái)?shù)模塊的源代碼 279
22.3 素?cái)?shù)模塊的調(diào)用樣例 281
22.4 試除法的原理 281
22.5 實(shí)現(xiàn)試除法檢測(cè) 283
22.6 埃拉托斯特尼篩法 283
22.7 使用埃拉托斯特尼篩法生成
素?cái)?shù) 285
22.8 Rabin-Miller素性檢測(cè)算法 286
22.9 尋找大素?cái)?shù) 287
22.10 生成大素?cái)?shù) 288
22.11 小結(jié) 289
22.12 習(xí)題 289
第 23章 為公鑰密碼生成密鑰 290
23.1 公鑰密碼體制 290
23.2 認(rèn)證的問(wèn)題 291
23.2.1 數(shù)字簽名 292
23.2.2 謹(jǐn)防MITM攻擊 293
23.3 生成公鑰和私鑰的步驟 293
23.4 公鑰生成程序的源代碼 294
23.5 公鑰生成程序的示例運(yùn)行 295
23.6 創(chuàng)建main()函數(shù) 296
23.7 通過(guò)generateKey()函數(shù)生成
密鑰 297
23.7.1 計(jì)算e的值 297
23.7.2 計(jì)算d的值 298
23.7.3 返回公私鑰對(duì) 298
23.8 通過(guò)makeKeyFiles()函數(shù)創(chuàng)建
密鑰文件 299
23.9 調(diào)用main()函數(shù) 300
23.10 混合密碼體制 301
23.11 小結(jié) 301
23.12 習(xí)題 301
第 24章 編寫公鑰密碼算法 302
24.1 公鑰密碼算法的實(shí)現(xiàn)原理 302
24.1.1 分組的創(chuàng)建 302
24.1.2 字符串轉(zhuǎn)換為分組 303
24.1.3 公鑰密碼算法進(jìn)行加解密的
數(shù)學(xué)原理 305
24.1.4 分組轉(zhuǎn)換為字符串 306
24.1.5 為什么不能破解公鑰密碼 307
24.2 實(shí)現(xiàn)公鑰密碼算法的源代碼 309
24.3 公鑰密碼算法實(shí)現(xiàn)程序的運(yùn)行
樣例 312
24.4 程序的設(shè)置 313
24.5 程序如何判斷加解密 314
24.6 通過(guò)getBlockFromText()函數(shù)
將字符串轉(zhuǎn)換為分組 315
24.6.1 min()函數(shù)及max()函數(shù) 315
24.6.2 將分組存儲(chǔ)在blockInt中 316
24.7 使用getTextFromBlocks()進(jìn)行
解密 317
24.7.1 使用insert()列表方法 318
24.7.2 將消息列表合并為一個(gè)字符串 318
24.8 編寫encryptMessage()函數(shù) 319
24.9 編寫decryptMessage()函數(shù) 319
24.10 從密鑰文件中讀取公鑰和
私鑰 320
24.11 將加密的內(nèi)容寫入文件 321
24.12 解密文件中的信息 323
24.13 調(diào)用main()函數(shù) 324
24.14 小結(jié) 324
附錄 調(diào)試Python代碼 326