Python 密碼學編程

Python 密碼學編程

作者: [美] Al Sweigart 斯維加特
出版社: 人民郵電
出版在: 2016-08-01
ISBN-13: 9787115424297
ISBN-10: 7115424292
裝訂格式: 平裝
總頁數: 324 頁





內容描述


<內容簡介>
Python是一種高級程序設計語言,因其簡潔、易讀及可擴展性日漸成為程序設計領域備受推崇的語言。同時,Python語言在算法領域也得到了很好的應用。本書通過理論和實例相結合的方式介紹了多種加密算法。全書共分24章,由淺入深地介紹了與密碼學編程相關的各類基礎知識、編程技巧以及算法實現。除此之外,本書還提供了相應的源碼下載資源,以供讀者更好地進行探索和學習。本書適合Python初學者和密碼學的初學者,也適合信息安全從業人員。

<章節目錄>
第1章製作紙質加密工具1 1.1密碼學是什麼1 1.2代碼與加密法2 1.3製作紙質加密輪盤2 1.4虛擬加密輪盤4 1.5如何使用加密輪盤加密4 1.6如何使用加密輪盤解密5 1.7另一個加密法工具:St. Cyr滑條6 1.8 A組練習6 1.9不用紙質工具做加密7 1.10 B組練習9 1.11雙重強度加密9 1.12通過計算機編程進行加密9 第2章Pygame基礎知識11 2.1下載和安裝Python 11 2.1.1 Windows安裝步驟11 2.1.2 OS X安裝步驟12 2.1.3 Ubuntu和Linux安裝步驟12 2.2下載pyperclip.py 12 2.3啟動IDLE 12 2.4特色程序13 2.5行號和空格14 2.6本書的文本換行14 2.7在線跟蹤程序15 2.8使用在線比較工具檢查輸入的代碼15 2.9複製粘貼文本15 2.10更多信息鏈接15 2.11編程和密碼學16 第3章Interactive Shell 20 3.1一些簡單的數學知識20 3.2整數和浮點數21 3.3表達式21 3.4運算符順序22 3.5計算表達式22 3.6錯誤是可以接受的22 3.7 A組練習23 3.8每個值都有一個數據類型23 3.9通過賦值語句把值存到變量裡23 3.10重寫變量24 3.11使用多個變量25 3.12變量名26 3.13駝峰式大小寫26 3.14 B組練習26 3.15總結——那我們什麼時候開始破譯26 第4章字符串和寫程序28 4.1字符串28 4.2使用+運算符的字符串連接29 4.3使用運算符的字符串複製30 4.4使用print()函數輸出值30 4.5轉義字符31 4.6引號和雙引號32 4.7 A組練習32 4.8索引操作33 4.9負索引33 4.10分片操作34 4.11空分片索引35 4.12 B組練習35 4.13在IDLE的文件編輯器裡寫程序35 4.14 Hello World! 36 4.15 Hello World的源代碼36 4.16保存你的程序37 4.17運行你的程序37 4.18打開你保存的程序38 4.19 “Hello World”程序如何工作38 4.20註釋38 4.21函數39 4.22 print()函數39 4.23 input()函數39 4.24結束程序40 4.25 C組練習40 4.26總結40 第5章反轉加密41 5.1反轉加密41 5.2反轉加密程序的源代碼41 5.3運行反轉加密程序42 5.4用在線比較工具檢查你的源代碼42 5.5這個程序如何工作43 5.6 len()函數43 5.7 while循環簡介44 5.8布爾數據類型44 5.9比較運算符45 5.10條件46 5.11代碼塊47 5.12 while循環語句47 5.13 “增長”一個字符串48 5.14一步一步跟蹤程序50 5.15在我們的程序裡使用input() 52 5.16 A組練習52 5.17總結52 第6章凱撒加密法53 6.1實現程序53 6.2凱撒加密程序的源代碼53 6.3運行凱撒加密程序54 6.4使用在線比較工具檢查你的源代碼55 6.5 A組練習55 6.6這個程序如何工作55 6.7使用import語句導入模塊55 6.8常量56 6.9 upper()和lower()字符串方法57 6.10 for循環語句58 6.11相當於for循環的while循環59 6.12 B組練習59 6.13 if語句59 6.14 else語句60 6.15 elif語句60 6.16 in和not in運算符61 6.17 find()字符串方法62 6.18 C組練習62 6.19回到代碼62 6.20顯示和復制加密/解密之後的字符串64 6.21加密非字母字符65 6.22總結66 第7章暴力破譯凱撒加密法67 7.1破譯加密67 7.2暴力破譯67 7.3凱撒加密法破譯程序的源代碼68 7.4運行凱撒加密法破譯程序68 7.5這個程序如何工作69 7.6 range()函數69 7.7回到代碼70 7.8字符串格式化72 7.9 A組練習72 7.10總結72 第8章使用換位加密法加密73 8.1換位加密法73 8.2 A組練習74 8.3換位加密法加密程序74 8.4換位加密法加密程序的源代碼75 8.5運行換位加密法加密程序76 8.6這個程序如何工作76 8.7使用def語句創建你自己的函數76 8.8程序的main ()函數77 8.9形參78 8.10對形參的修改只存在於函數之內79 8.11全局作用域和本地作 ​​用域裡的變量79 8.12 global語句79 8.13 B組練習81 8.14列表數據類型81 8.15使用list ()函數把區間對象轉換成列表82 8.16重新賦值列表裡的項83 8.17重新賦值字符串裡的字符83 8.18列表的列表83 8.19 C組練習84 8.20在列表上使用len()和in運算符84 8.21使用+和運算符的列表連接和復制85 8.22 D組練習85 8.23換位加密算法85 8.24增強賦值運算符88 8.25回到代碼88 8.26 join()字符串方法90 8.27返回值和return語句91 8.28 E組練習91 8.29回到代碼91 8.30特殊的name變量92 8.31密鑰的大小和消息的長度93 8.32總結93 第9章使用換位加密法解密94 9.1在紙上使用換位加密法解密94 9.2練習A組96 9.3換位加密法解密程序96 9.4換位加密法解密程序的源代碼96 9.5這個程序如何工作97 9.6 math.ceil()、math.floor()和round()函數98 9.7 and和or布爾運算符101 9.8 B組練習102 9.9真值表102 9.10 and和or運算符可以簡化代碼103 9.11布爾運算符的運算順序103 9.12回到代碼103 9.13 C組練習105 9.14總結105 第10章寫一個程序測試我們的程序106 10.1換位加密法測試程序的源代碼106 10.2運行換位加密法測試程序107 10.3這個程序如何工作108 10.4偽隨機數和random.seed() 函數108 10.5 random .randint()函數109 10.6引用110 10.7 copy.deepcopy()函數112 10.8 A組練習112 10.9 random.shuffle()函數112 10.10隨機打亂一個字符串113 10.11回到代碼114 10.12 sys.exit()函數114 10.13測試我們的測試程序115 10.14總結116 第11章加密和解密文件117 11.1純文本文件117 11.2換位加密法文件加密程序的源代碼118 11.3運行換位加密法文件加密程序120 11.4讀取文件120 11.4.1 open()函數和文件對象120 11.4.2 read()文件對象方法120 11.4.3 close()文件對象方法121 11.5寫入文件121 11.5.1 write()文件對象方法122 11.6這個程序如何工作122 11.7 os.path.exists()函數123 11.8 startswith()和endswith()字符串方法123 11.9 title()字符串方法124 11.10 time模塊和time.time()函數125 11.11回到代碼126 11.12 A組練習126 11.13總結127 第12章通過編程檢測英文128 12.1計算機如何理解英文128 12.2 A組練習130 12.3檢測英文模塊130 12.4檢測英文模塊的源代碼130 12.5這個程序如何工作131 12.6詞典和詞典數據類型132 12.7添加或修改詞典裡的項132 12.8 B組練習133 12.9在詞典上使用len()函數133 12.10在詞典上使用in運算符133 12.11在詞典上使用for循環134 12.12 C組練習134 12.13詞典與列表之間的區別134 12.14在詞典上查找項比在列表上更快135 12.15 split()方法135 12.16 None值136 12.17回到代碼136 12.18 “除以零”錯誤138 12.19 float()、int( )和str()函數以及整數除法138 12.20 D組練習139 12.21回到代碼139 12.22 append()列表方法139 12.23默認參數值140 12.24計算比例141 12.25 E組練習142 12.26總結143 第13章破譯換位加密法144 13.1換位加密法破譯程序的源代碼144 13.2運行換位加密法破譯程序145 13.3這個程序如何工作146 13.4使用三引號的多行字符串146 13.5回到代碼147 13.6 strip()字符串方法148 13.7 A組練習150 13.8總結150 第14章取模運算與乘數加密法和仿射加密法151 14.1噢,不,數學!151 14.2數學,噢耶!151 14.3取模運算(又名時鐘運算) 151 14.4取模運算符% 152 14.5 A組練習153 14.6 GCD:最大公約數(又名最大公因子) 153 14.7使用古氏積木(Cuisenaire rods)可視化因子和GCD 154 14.8 B組練習155 14.9多重賦值155 14.10通過多重賦值交換值156 14.11找出兩個數字的GCD的歐幾里得算法156 14.12 “互質” 157 14.13 C組練習157 14.14乘數加密法157 14.15 D組練習159 14.16乘數加密法+凱撒加密法= 仿射加密法159 14.17仿射密鑰的第一個問題159 14.18使用仿射加密法解密160 14.19找出模逆161 14.20 //整數除法運算符161 14.21 cryptomath模塊的源代碼162 14.22 E組練習163 14.23總結163 第15章仿射加密法164 15.1仿射加密法程序的源代碼164 15.2運行仿射加密法程序166 15.3 A組練習166 15.4這個程序如何工作166 15.5把一個密鑰分成兩個密鑰167 15.6元祖數據類型168 15.7密鑰的輸入驗證168 15.8仿射加密法加密函數169 15.9仿射加密法解密函數170 15.10生成隨機密鑰171 15.11仿射密鑰的第二個問題:仿射加密法可以有多少個密鑰172 15.12總結173 第16章破譯仿射加密法174 16.1仿射加密法破譯程序的源代碼174 16.2運行仿射加密法破譯程序175 16.3這個程序如何工作176 16.4仿射加密法破譯函數177 16.5 **指數運算符177 16.6 continue語句178 16.7 A組練習180 16.8總結180 第17章簡單替代加密法181 17.1使用紙筆實現簡單替代加密法181 17.2 A組練習182 17.3簡單替代加密法的源代碼182 17.4運行簡單替代加密法程序183 17.5這個程序如何工作184 17.6程序的main()函數184 17.7 sort()列表方法185 17.8包裝器函數186 17.9程序的translateMessage() 函數187 17.10 isupper()和islower()字符串方法189 17.11 B組練習190 17.12生成隨機密鑰190 17.13加密空格和標點符號191 17.14 C組練習191 17.15總結192 第18章破譯簡單替代加密法193 18.1計算單詞模式193 18.2獲取密詞的候選單詞列表194 18.3 A組練習195 18.4單詞模式模塊的源代碼195 18.5運行單詞模式模塊196 18.6這個程序如何工作197 18.7 pprint. pprint()和pprint. pformat()函數197 18.8在Python裡使用列表創建字符串198 18.9計算單詞模式199 18.10單詞模式程序的main()函數200 18.11破譯簡單替代加密法202 18.12簡單替代破譯程序的源代碼202 18.13破譯簡單替代加密法(理論) 205 18.14使用Interactive Shell探索破譯函數205 18.15這個程序如何工作209 18.16導入所有東西209 18.17正則表達式和sub()正則方法簡介210 18.18破譯程序的main()函數211 18.19部分破譯加密法211 18.20空密字映射212 18.21把字母添加到密字映射213 18.22計算兩個字母映射的交集214 18.23從密字映射移除已經破譯的字母215 18.24破譯簡單替代加密法217 18.25從密字映射創建密鑰219 18.26我們不能把空格也加密嗎220 18.27總結220 第19章維吉尼亞加密法221 19.1不可破譯的加密法221 19.2維吉尼亞密鑰裡的多個“密鑰” 221 19.3維吉尼亞加密法程序的源代碼224 19.4運行維吉尼亞加密法程序226 19.5這個程序如何工作227 19.6總結230 第20章頻率分析231 20.1字母頻率和ETAOIN 231 20.1.1匹配字母頻率232 20.1.2計算頻率匹配分值的例子233 20.1.3另一個計算頻率匹配分值的例子233 20.1.4破譯每個子密鑰234 20.2匹配字母頻率的代碼234 20.3這個程序如何工作236 20.4最常見的字母“ETAOIN” 237 20.5這個程序的getLettersCount() 函數237 20.6這個程序的getItemAtIndex Zero()函數238 20.7這個程序的getFrequencyOrder()函數238 20.8 sort()方法的key和reverse關鍵字參數239 20.9把函數作為值傳遞240 20.10通過keys()、values()和items()詞典方法把詞典轉換成列表241 20.11對詞典的項進行排序242 20.12這個程序的englishFreqMatch Score()函數243 20.13總結244 第21章破譯維吉尼亞加密法245 21.1詞典攻擊245 21.2維吉尼亞詞典攻擊程序的源代碼245 21.3運行維吉尼亞詞典破譯程序246 21.4 readlines()文件對象方法247 21.5巴貝奇攻擊和卡西斯基試驗247 21.6卡西斯基試驗的第1步—— 找出重複序列的間距247 21.7卡西斯基試驗的第2步—— 獲取間距的因子248 21.8從字符串獲取每隔N個字母249 21.9頻率分析249 21.10暴力破譯可能密鑰251 21.11維吉尼亞破譯程序的源代碼251 21.12運行維吉尼亞破譯程序256 21.13這個程序如何工作258 21.14找出重複序列259 21.15計算因子260 21.16通過set()函數來移除重複值261 21.17卡西斯基測試算法263 21.18 extend()列表方法264 21.19 print()的end關鍵字參數268 21.20 itertools.product()函數269 21.21 break語句272 21.22 A組練習273 21.23修改破譯程序的常量273 21.24總結274 第22章一次密碼本加密法275 22.1牢不可破的一次密碼本加密法275 22.2為什麼一次密碼本加密法是牢不可破的275 22.3小心偽隨機276 22.4小心二次密碼本加密法277 22.5二次密碼本加密法就是維吉尼亞加密法277 22.6 A組練習278 22.7總結278 第23章尋找質數279 23.1質數279 23.2合數280 23.3質數篩選模塊的源代碼280 23.4這個程序如何工作281 23.5如何判斷一個數字是不是質數282 23.6埃拉托色尼篩選法283 23.7 primeSieve()函數284 23.8檢測質數285 23.9拉賓米勒模塊的源代碼285 23.10運行拉賓米勒模塊287 23.11這個程序如何工作287 23.12拉賓米勒算法287 23.13新的經過改進的isPrime()函數288 23.14總結289 第24章公鑰密碼學和RSA加密法291 24.1公鑰密碼學291 24.2 “課本”RSA的危險292 24.3身份驗證的問題292 24.4中間人攻擊293 24.5生成公鑰和私鑰293 24.6 RSA密鑰生成程序的源代碼294 24.7運行RSA密鑰生成程序295 24.8這個密鑰生成程序如何工作296 24.9這個程序的generateKey()函數297 24.10 RSA密鑰文件格式299 24.11混合加密機制300 24.12 RSA加密法程序的源代碼300 24.13運行RSA加密法程序303 24.14 A組練習304 24.15數字簽名304 24.16 RSA加密法程序如何工作306 24.17 ASCII:使用數字來表示字符307 24.18 chr()和ord()函數308 24.19 B組練習308 24.20區塊308 24.21使用getBlocksFromText()把字符串轉成區塊311 24.22 encode()字符串方法和字節數據類型311 24.23 bytes()函數和decode()bytes 方法312 24.24 C組練習312 24.25回到代碼313 24.26 min()和max()函數313 24.27 insert()列表方法315 24.28 RSA加密和解密的數學運算316 24.29 pow()函數317 24.30從密鑰文件讀取公鑰和私鑰318 24.31完整的RSA加密流程318 24.32完整的RSA解密流程320 24.33 D組練習321 24.34我們為什麼不能破譯RSA 加密法321 24.35總結323




相關書籍

Python 3高級教程(第3版)

作者 [美]J.伯頓·布朗寧(J.Burton Browning) [美]馬蒂·阿爾金(Marty Alchin) ; 楊慶麟 譯

2016-08-01

基於 MATLAB 的人工智能模式識別

作者 周潤景 武立群 藺雨露

2016-08-01

OpenCV 4.5 電腦視覺開發實戰 (基於 VC++)

作者 朱文偉 李建英

2016-08-01