Python密碼學編程
1 制作紙質加密工具
1.1 密碼學是什么
1.2 代碼與加密法
1.3 制作紙質加密輪盤
1.4 虛擬加密輪盤
1.5 如何使用加密輪盤加密
1.6 如何使用加密輪盤解密
1.7 另一個加密法工具:St. Cyr滑條
1.8 A組練習
1.9 不用紙質工具做加密
1.10 B組練習
1.11 雙重強度加密
1.12 通過計算機編程進行加密
2 Pygame基礎知識
2.1 下載和安裝Python
2.1.1 Windows安裝步驟
2.1.2 OS X安裝步驟
2.1.3 Ubuntu和Linux安裝步驟
2.2 下載pyperclip.py
2.3 啟動IDLE
2.4 特色程序
2.5 行號和空格
2.6 本書的文本換行
2.7 在線跟蹤程序
2.8 使用在線比較工具檢查輸入的代碼
2.9 復制粘貼文本
2.10 更多信息鏈接
2.11 編程和密碼學
3 交互式Shell
3.1 一些簡單的數學知識
3.2 整數和浮點數
3.3 表達式
3.4 運算符順序
3.5 計算表達式
3.6 錯誤是可以接受的
3.7 A組練習
3.8 每個值都有一個數據類型
3.9 通過賦值語句把值存到變量里
3.10 重寫變量
3.11 使用多個變量
3.12 變量名
3.13 駝峰式大小寫
3.14 B組練習
3.15 小結
4 字符串和寫程序
4.1 字符串
4.2 使用+運算符的字符串連接
4.3 使用*運算符的字符串復制
4.4 使用print()函數輸出值
4.5 轉義字符
4.6 引號和雙引號
4.7 A組練習
4.8 索引操作
4.9 負索引
4.10 分片操作
4.11 空分片索引
4.12 B組練習
4.13 在IDLE的文件編輯器里寫程序
4.14 Hello World!
4.15 Hello World的源代碼
4.16 保存你的程序
4.17 運行你的程序
4.18 打開你保存的程序
4.19 “Hello World”程序如何工作
4.20 注釋
4.21 函數
4.22 print()函數
4.23 input()函數
4.24 結束程序
4.25 C組練習
4.26 小結
5 反轉加密法
5.1 反轉加密法
5.2 反轉加密法程序的源代碼
5.3 運行反轉加密法程序
5.4 用在線比較工具檢查你的源代碼
5.5 這個程序如何工作
5.6 len()函數
5.7 while循環簡介
5.8 布爾數據類型
5.9 比較運算符
5.10 條件
5.11 代碼塊
5.12 while循環語句
5.13 “增長”一個字符串
5.14 一步一步跟蹤程序
5.15 在我們的程序里使用input()
5.16 A組練習
5.17 小結
6 凱撒加密法
6.1 實現程序
6.2 凱撒加密法程序的源代碼
6.3 運行凱撒加密法程序
6.4 使用在線比較工具檢查你的源代碼
6.5 A組練習
6.6 這個程序如何工作
6.7 使用import語句導入模塊
6.8 常量
6.9 upper()和lower()字符串方法
6.10 for循環語句
6.11 相當於for循環的while循環
6.12 B組練習
6.13 if語句
6.14 else語句
6.15 elif語句
6.16 in和not in運算符
6.17 find()字符串方法
6.18 C組練習
6.19 回到代碼
6.20 顯示和復制加密/解密之后的字符串
6.21 加密非字母字符
6.22 小結
7 暴力破譯凱撒加密法
7.1 破譯加密
7.2 暴力破譯
7.3 凱撒加密法破譯程序的源代碼
7.4 運行凱撒加密法破譯程序
7.5 這個程序如何工作
7.6 range()函數
7.7 回到代碼
7.8 字符串格式化
7.9 A組練習
7.10 小結
8 使用換位加密法加密
8.1 換位加密法
8.2 A組練習
8.3 換位加密法加密程序
8.4 換位加密法加密程序的源代碼
8.5 運行換位加密法加密程序
8.6 這個程序如何工作
8.7 使用def語句創建你自己的函數
8.8 程序的main()函數
8.9 形參
8.10 對形參的修改只存在於函數之內
8.11 全局作用域和本地作用域里的變量
8.12 global語句
8.13 B組練習
8.14 列表數據類型
8.15 使用list()函數把區間對象轉換成列表
8.16 重新賦值列表里的項
8.17 重新賦值字符串里的字符
8.18 列表的列表
8.19 C組練習
8.20 在列表上使用len()和in運算符
8.21 使用+和*運算符的列表連接和復制
8.22 D組練習
8.23 換位加密算法
8.24 增強賦值運算符
8.25 回到代碼
8.26 join()字符串方法
8.27 返回值和return語句
8.28 E組練習
8.29 回到代碼
8.30 特殊的 name 變量
8.31 密鑰的大小和消息的長度
8.32 小結
9 使用換位加密法解密
9.1 在紙上使用換位加密法解密
9.2 練習A組
9.3 換位加密法解密程序
9.4 換位加密法解密程序的源代碼
9.5 這個程序如何工作
9.6 math.ceil()、math.floor()和round()函數
9.7 and和or布爾運算符
9.8 B組練習
9.9 真值表
9.10 and和or運算符可以簡化代碼
9.11 布爾運算符的運算順序
9.12 回到代碼
9.13 C組練習
9.14 小結
10 寫一個程序測試我們的程序
10.1 換位加密法測試程序的源代碼
10.2 運行換位加密法測試程序
10.3 這個程序如何工作
10.4 偽隨機數和random.seed()函數
10.5 random.randint()函數
10.6 引用
10.7 copy.deepcopy()函數
10.8 A組練習
10.9 random.shuffle()函數
10.10 隨機打亂一個字符串
10.11 回到代碼
10.12 sys.exit()函數
10.13 測試我們的測試程序
10.14 小結
11 加密和解密文件
11.1 純文本文件
11.2 換位加密法文件加密程序的源代碼
11.3 運行換位加密法文件加密程序
11.4 讀取文件
11.4.1 open()函數和文件對象
11.4.2 read()文件對象方法
11.4.3 close()文件對象方法
11.5 寫入文件
write()文件對象方法
11.6 這個程序如何工作
11.7 os.path.exists()函數
11.8 startswith()和endswith()字符串方法
11.9 title()字符串方法
11.10 time模塊和time.time()函數
11.11 回到代碼
11.12 A組練習
11.13 小結
12 通過編程檢測英文
12.1 計算機如何理解英文
12.2 A組練習
12.3 檢測英文模塊
12.4 檢測英文模塊的源代碼
12.5 這個程序如何工作
12.6 字典和字典數據類型
12.7 添加或修改字典里的項
12.8 B組練習
12.9 在字典上使用len()函數
12.10 在字典上使用in運算符
12.11 在字典上使用for循環
12.12 C組練習
12.13 字典與列表之間的區別
12.14 在字典上查找項比在列表上更快
12.15 split()方法
12.16 None值
12.17 回到代碼
12.18 “除以零”錯誤
12.19 float()、int()和str()函數以及整數除法
12.20 D組練習
12.21 回到代碼
12.22 append()列表方法
12.23 默認參數值
12.24 計算比例
12.25 E組練習
12.26 小結
13 破譯換位加密法
13.1 換位加密法破譯程序的源代碼
13.2 運行換位加密法破譯程序
13.3 這個程序如何工作
13.4 使用三引號的多行字符串
13.5 回到代碼
13.6 strip()字符串方法
13.7 A組練習
13.8 小結
14 取模運算與乘數加密法和仿射加密法
14.1 噢,不,數學!
14.2 數學,噢耶!
14.3 取模運算(又名時鍾運算)
14.4 取模運算符%
14.5 A組練習
14.6 GCD:最大公約數(又名最大公因數)
14.7 使用古氏積木(Cuisenaire rods)可視化因數和GCD
14.8 B組練習
14.9 多重賦值
14.10 通過多重賦值交換值
14.11 找出兩個數字的GCD的歐幾里得算法
14.12 “互質”
14.13 C組練習
14.14 乘數加密法
14.15 D組練習
14.16 乘數加密法 + 凱撒加密法 = 仿射加密法
14.17 仿射密鑰的第一個問題
14.18 使用仿射加密法解密
14.19 找出模逆
14.20 //整數除法運算符
14.21 cryptomath模塊的源代碼
14.22 E組練習
14.23 小結
15 仿射加密法
15.1 仿射加密法程序的源代碼
15.2 運行仿射加密法程序
15.3 A組練習
15.4 這個程序如何工作
15.5 把一個密鑰分成兩個密鑰
15.6 元組數據類型
15.7 密鑰的輸入驗證
15.8 仿射加密法加密函數
15.9 仿射加密法解密函數
15.10 生成隨機密鑰
15.11 仿射密鑰的第二個問題:仿射加密法可以有多少個密鑰
15.12 小結
16 破譯仿射加密法
16.1 仿射加密法破譯程序的源代碼
16.2 運行仿射加密法破譯程序
16.3 這個程序如何工作
16.4 仿射加密法破譯函數
16.5 **指數運算符
16.6 continue語句
16.7 A組練習
16.8 小結
17 簡單替代加密法
17.1 使用紙筆實現簡單替代加密法
17.2 A組練習
17.3 簡單替代加密法的源代碼
17.4 運行簡單替代加密法程序
17.5 這個程序如何工作
17.6 程序的main()函數
17.7 sort()列表方法
17.8 包裝器函數
17.9 程序的translateMessage()函數
17.10 isupper()和islower()字符串方法
17.11 B組練習
17.12 生成隨機密鑰
17.13 加密空格和標點符號
17.14 C組練習
17.15 小結
18 破譯簡單替代加密法
18.1 計算單詞模式
18.2 獲取密詞的候選單詞列表
18.3 A組練習
18.4 單詞模式模塊的源代碼
18.5 運行單詞模式模塊
18.6 這個程序如何工作
18.7 pprint.pprint()和pprint.pformat()函數
18.8 在Python里使用列表創建字符串
18.9 計算單詞模式
18.10 單詞模式程序的main()函數
18.11 破譯簡單替代加密法
18.12 簡單替代破譯程序的源代碼
18.13 破譯簡單替代加密法(理論)
18.14 使用交互式Shell探索破譯函數
18.15 這個程序如何工作
18.16 導入所有東西
18.17 正則表達式和sub()正則方法簡介
18.18 破譯程序的main()函數
18.19 部分破譯加密法
18.20 空密字映射
18.21 把字母添加到密字映射
18.22 計算兩個密字映射的交集
18.23 從密字映射移除已經破譯的字母
18.24 破譯簡單替代加密法
18.25 從密字映射創建密鑰
18.26 我們不能把空格也加密嗎
18.27 總結
19 維吉尼亞加密法
19.1 不可破譯的加密法
19.2 維吉尼亞密鑰里的多個“密鑰”
19.3 維吉尼亞加密法程序的源代碼
19.4 運行維吉尼亞加密法程序
19.5 這個程序如何工作
19.6 小結
20 頻率分析
20.1 字母頻率和ETAOIN
20.1.1 匹配字母頻率
20.1.2 計算頻率匹配分值的例子
20.1.3 另一個計算頻率匹配分值的例子
20.1.4 破譯每個子密鑰
20.2 匹配字母頻率的代碼
20.3 這個程序如何工作
20.4 最常見的字母“ETAOIN”
20.5 這個程序的getLettersCount()函數
20.6 這個程序的getItemAtIndexZero()函數
20.7 這個程序的getFrequencyOrder()函數
20.8 sort()方法的key和reverse關鍵字參數
20.9 把函數作為值傳遞
20.10 通過keys()、values()和items()字典方法把字典轉換成列表
20.11 對字典的項進行排序
20.12 這個程序的englishFreqMatchScore()函數
20.13 小結
21 破譯維吉尼亞加密法
21.1 字典攻擊
21.2 維吉尼亞字典攻擊程序的源代碼
21.3 運行維吉尼亞字典破譯程序
21.4 readlines()文件對象方法
21.5 巴貝奇攻擊和卡西斯基試驗
21.6 卡西斯基試驗的第1步——找出重復序列的間距
21.7 卡西斯基試驗的第2步——獲取間距的因數
21.8 從字符串獲取每隔N個字母
21.9 頻率分析
21.10 暴力破譯可能密鑰
21.11 維吉尼亞破譯程序的源代碼
21.12 運行維吉尼亞破譯程序
21.13 這個程序如何工作
21.14 找出重復序列
21.15 計算因數
21.16 通過set()函數來移除重復值
21.17 卡西斯基測試算法
21.18 extend()列表方法
21.19 print()的end關鍵字參數
21.20 itertools.product()函數
21.21 break語句
21.22 A組練習
21.23 修改破譯程序的常量
21.24 小結
22 一次一密加密法
22.1 牢不可破的一次一密加密法
22.2 為什么一次一密加密法是牢不可破的
22.3 小心偽隨機
22.4 小心二次密碼本加密法
22.5 二次密碼本加密法就是維吉尼亞加密法
22.6 A組練習
22.7 小結
23 尋找質數
23.1 質數
23.2 合數
23.3 質數篩選模塊的源代碼
23.4 這個程序如何工作
23.5 如何判斷一個數字是不是質數
23.6 埃拉托色尼篩選法
23.7 primeSieve()函數
23.8 檢測質數
23.9 拉賓米勒模塊的源代碼
23.10 運行拉賓米勒模塊
23.11 這個程序如何工作
23.12 拉賓米勒算法
23.13 新的經過改進的isPrime()函數
23.14 小結
24 公鑰密碼學和RSA加密法
24.1 公鑰密碼學
24.2 “教材”RSA的危險
24.3 身份驗證的問題
24.4 中間人攻擊
24.5 生成公鑰和私鑰
24.6 RSA密鑰生成程序的源代碼
24.7 運行RSA密鑰生成程序
24.8 這個密鑰生成程序如何工作
24.9 這個程序的generateKey()函數
24.10 RSA密鑰文件格式
24.11 混合加密機制
24.12 RSA加密法程序的源代碼
24.13 運行RSA加密法程序
24.14 A組練習
24.15 數字簽名
24.16 RSA加密法程序如何工作
24.17 ASCII:使用數字來表示字符
24.18 chr()和ord()函數
24.19 B組練習
24.20 區塊
24.21 使用getBlocksFromText()把字符串轉成區塊
24.22 encode()字符串方法和bytes數據類型
24.23 bytes()函數和bytes的decode()方法
24.24 C組練習
24.25 回到代碼
24.26 min()和max()函數
24.27 insert()列表方法
24.28 RSA加密和解密的數學運算
24.29 pow()函數
24.30 從密鑰文件讀取公鑰和私鑰
24.31 完整的RSA加密流程
24.32 完整的RSA解密流程
24.33 D組練習
24.34 我們為什么不能破譯RSA加密法
24.35 小結
思維導圖
防止博客圖床圖片失效,防止圖片源站外鏈:
http://www.processon.com/chart_image/5e5b3023e4b0d4dc8776c8dc.png)
思維導圖在線編輯鏈接: