|
-- 會員 / 註冊 --
|
|
|
|
Python密碼學編程 第2版 ( 簡體 字) |
作者:[美]阿爾·斯維加特(Al Sweigart) | 類別:1. -> 程式設計 -> Python |
譯者: |
出版社:人民郵電出版社 | 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 |
序: |
|