-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Python密碼學編程 第2版

( 簡體 字)
作者:[美]阿爾·斯維加特(Al Sweigart)類別:1. -> 程式設計 -> Python
譯者:
出版社:人民郵電出版社Python密碼學編程 第2版 3dWoo書號: 52471
詢問書籍請說出此書號!

有庫存
NT售價: 445

出版日:4/1/2020
頁數:330
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787115529992
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

內容簡介:

自互聯網面世以來,網絡安全一直是人們所重視的問題。從20世紀中葉開始,流傳千百年的密碼算法紛紛被投入到了網絡安全的應用中;隨后,在20世紀70年代,與古典密碼完全不同的密碼體制——公鑰密碼算法橫空出世,密碼學的發展完成了一次飛躍。
Python誕生于20世紀90年代,它是一種面向對象語言特點與解釋型語言特點相結合的高級程序設計語言,已經得到了大規模應用。本書將Python語言與密碼學結合起來,從簡單的古典密碼算法開始,一直到公鑰密碼算法,進行了簡潔而細致的說明與解讀。每一種密碼算法的講解包括原理部分、實現部分和破解部分(公鑰算法不包括破解部分),其中后兩者附有詳細的Python代碼,注釋簡潔明了,可讀性極高。每章的末尾還提供了一些習題,幫助讀者鞏固所學知識并進行深入理解。
本書適合任何想要學習Python編程并對密碼學抱有興趣的讀者。本書對Python編程的基礎要求不高,初學者可以放心地閱讀本書。相信本書一定能夠為讀者帶來絕佳的閱讀體驗。
目錄:

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

24.7.2 將消息列表合并為一個字符串 318
24.8 編寫encryptMessage()函數 319
24.9 編寫decryptMessage()函數 319
24.10 從密鑰文件中讀取公鑰和
私鑰 320
24.11 將加密的內容寫入文件 321
24.12 解密文件中的信息 323
24.13 調用main()函數 324
24.14 小結 324
附錄 調試Python代碼 326
序: