
0人評分過此書
學習Python程式設計和密碼的破解技巧
本書教您學習製作與破解密碼的相關演算法知識,以及如何在Python中編寫程式來實作和傳送機密訊息!
本書前幾章會教您Python基礎的程式設計知識和技巧,接著學習各種經典傳統密碼的相關知識原理,以及怎麼使用這類傳統密碼進行加密解密,並編寫、實作、測試和破解程式。本書所講述的包括反轉密碼、凱撒密碼、換位密碼、仿射密碼、簡易替換密碼、維吉尼亞密碼等,最後還有公鑰密碼,這個保護著目前線上交易加密應用,像數位簽章、email和比特幣等都有使用的技術。
書中所有範例程式都會完整列出,並逐行解說其Python技巧和運作原理。讀完本書,您不僅學會怎麼在Python中編寫程式碼,您還會有很多完整的程式實例可實證您的學習成果!
本書內容還包括:
‧教您結合迴圈、變數和流程控制等技巧在實際的程式上應用
‧教您使用字典攻擊馬上檢測解密訊息是否為英文或只是亂碼
‧教您製作測試程式,用來確保加密和解密的處理是正確無誤的
‧以完整的仿射密碼實例教您活用模除運算等數學概念來加密訊息
‧教您活用暴力破解法與頻率分析等破解技術
從範例程式中動手實作與體會是最好的學習方式,本書有完整眾多的實例能讓您能夠享受學習Python與密碼學的樂趣。
本書教您學習製作與破解密碼的相關演算法知識,以及如何在Python中編寫程式來實作和傳送機密訊息!
本書前幾章會教您Python基礎的程式設計知識和技巧,接著學習各種經典傳統密碼的相關知識原理,以及怎麼使用這類傳統密碼進行加密解密,並編寫、實作、測試和破解程式。本書所講述的包括反轉密碼、凱撒密碼、換位密碼、仿射密碼、簡易替換密碼、維吉尼亞密碼等,最後還有公鑰密碼,這個保護著目前線上交易加密應用,像數位簽章、email和比特幣等都有使用的技術。
書中所有範例程式都會完整列出,並逐行解說其Python技巧和運作原理。讀完本書,您不僅學會怎麼在Python中編寫程式碼,您還會有很多完整的程式實例可實證您的學習成果!
本書內容還包括:
‧教您結合迴圈、變數和流程控制等技巧在實際的程式上應用
‧教您使用字典攻擊馬上檢測解密訊息是否為英文或只是亂碼
‧教您製作測試程式,用來確保加密和解密的處理是正確無誤的
‧以完整的仿射密碼實例教您活用模除運算等數學概念來加密訊息
‧教您活用暴力破解法與頻率分析等破解技術
從範例程式中動手實作與體會是最好的學習方式,本書有完整眾多的實例能讓您能夠享受學習Python與密碼學的樂趣。
-
簡介
-
適合閱讀本書的讀者
-
本書內容
-
如何使用本書
-
輸入原始程式碼
-
檢查輸入的錯誤
-
本書編寫程式的慣例
-
線上資源
-
-
下載與安裝Python
-
Windows版安裝指引
-
Mac OS版安裝指引
-
Ubuntu版安裝指示
-
-
下載pyperclip.py
-
開啟IDLE
-
總結
-
-
第1章 製作紙上的密碼工具
-
什麼是密碼學?
-
代碼與密碼
-
凱撒密碼
-
密碼輪盤
-
以密碼輪盤進行加密
-
以密碼輪盤進行解密
-
以數學算術來加密和解密
-
-
為什麼雙重加密不可行
-
總結
-
練習題
-
-
第2章 在互動式Shell中程式設計
-
一些簡易的數學表示式
-
整數與浮點數
-
表示式
-
運算子的順序
-
表示式運算求值
-
-
以變數來儲存值
-
覆寫變數
-
變數名稱
-
-
總結
-
練習題
-
-
第3章 字串與編寫程式
-
使用字串值來處理文字
-
以+運算子連接字串
-
使用*運算子複製字串
-
使用索引足標從字串中擷取字元
-
-
使用print()函式印出值
-
印出轉義字元
-
單引號與雙引號
-
在IDLE的File Editor中編寫程式
-
「Hello, world!」的原始程式碼
-
使用Online diff tool檢查程式碼
-
使用IDLE存取您的程式
-
儲存您的程式
-
執行您的程式
-
開啟您儲存的程式檔
-
-
「Hello world!」程式的運作原理
-
注釋
-
對使用者印出說明指示
-
取得使用者輸入的東西
-
結束程式
-
-
總結
-
練習題
-
-
第4章 反轉密碼
-
反轉密碼程式的原始程式碼
-
反轉密碼程式的執行範例
-
設計注釋與變數
-
找出字串的長度
-
while迴圈簡介
-
布林資料型別
-
比較運算子
-
區塊
-
while迴圈陳述式
-
「增長」某個字串
-
-
利用input()輸入來改進程式
-
總結
-
練習題
-
-
第5章 凱撒密碼
-
凱撒密碼程式的原始程式碼
-
凱撒密碼程式的執行範例
-
匯入模組與設定變數
-
常數與變數
-
for迴圈陳述句
-
迴圈範例
-
與for迴圈相同作用的while迴圈
-
-
if陳述句
-
if陳述句範例
-
else陳述句
-
elif陳述句
-
-
in和not in運算子
-
find()字串方法
-
加密和解密符號
-
繞回開頭或尾端倒數回去
-
處理不在符號集中的符號
-
-
顯示和複製轉換後的字串
-
加密其他符號
-
總結
-
練習題
-
-
第6章 以暴力破解凱撒密碼
-
凱撒密碼破解程式的原始程式碼
-
凱撒密碼破解程式的執行範例
-
設定變數
-
以range()函式進行迴圈
-
解密訊息
-
使用字串格式化來編排密鑰和解密訊息
-
總結
-
練習題
-
-
第7章 使用換位密碼進行加密
-
換位密碼的運作原理
-
以手動方式加密訊息
-
建立加密程式
-
-
換位密碼程式的原始程式碼
-
換位密碼程式的執行範例
-
使用def 陳述句建立自己的函式
-
定義有引數和參數的函式
-
參數的更改只存在於函式內部
-
定義main()函式
-
-
把密鑰和訊息當成引數傳入
-
串列資料型別
-
重新指定項目到串列中
-
串列中的串列
-
使用len()和in運算子來處理串列
-
使用+和*運算子來連接和複製串列
-
-
換位加密的演算法
-
擴增指定運算子
-
利用currentIndex在message字串中逐個字元移動
-
join()字串方法
-
返回值與返回陳述式
-
return陳述式的範例
-
返回加密後的密文
-
-
__name__變數
-
總結
-
練習題
-
-
第8章 使用換位密碼進行解密
-
在紙上進行換位密碼的解密處理
-
換位密碼解密程式的原始程式碼
-
換位密碼解密程式的執行範例
-
匯入模組與設定main()函式
-
使用密鑰來解密訊息
-
round()、math.ceil()和math.floor()函式
-
decryptMessage()函式
-
布林運算子
-
調整欄和列的變數
-
-
呼叫main()函式
-
總結
-
練習題
-
-
第9章 編寫程式來測試您的程式
-
換位密碼測試程式的原始程式碼
-
換位密碼測試程式的執行範例
-
匯入模組
-
建立偽隨機數
-
建立隨機字串
-
隨機多次複製字串
-
串列變數使用參照
-
傳參照
-
使用copy.deepcopy()來複製串列
-
random.shuffle()函式
-
隨機重新排放字串中的字元
-
-
測試每個訊息
-
檢測密碼程式是否正確運作和結束程式執行
-
呼叫main()函式
-
測試執行這個測試程式
-
總結
-
練習題
-
-
第10章 加密和解密檔案
-
純文字檔
-
換位檔案密碼程式的原始程式碼
-
換位檔案密碼程式的執行範例
-
處理檔案
-
開啟檔案
-
寫入與關閉檔案
-
讀取檔案
-
-
設定main()函式
-
檢測檔案是否存在
-
os.path.exists()函式
-
使用os.path.exists()函式檢查輸入檔是否存在
-
-
利用字串方法讓使用者輸入更有彈性
-
upper()、lower()和title()字串方法
-
startswith()和endswith()字串方法
-
在程式中使用字串方法
-
-
讀取輸入檔
-
計算加密或解密所花費的時間
-
time模組和time.time()函式
-
在程式中使用time.time()函式
-
-
寫入輸出檔
-
呼叫main()函式
-
總結
-
練習題
-
-
第11章 以程式來偵測英文
-
電腦要如何理解英文字
-
偵測英文模組的原始程式碼
-
偵測英文模組的執行範例
-
說明指引與設定常數
-
字典資料型別
-
字典和串列的差異
-
在字典中新增或變更項目
-
在字典上使用len()函式
-
在字典上使用in運算子
-
在字典中搜尋比在串列中搜尋快
-
在字典上使用for迴圈
-
-
字典檔的實作處理
-
split()方法
-
把字典檔分割成單字
-
返回字典資料型別
-
-
計算訊息中英文單字的數量
-
除以0的錯誤
-
計算識別為英文單字的個數
-
float()、int()、str()函式與整數除法
-
找出訊息文字中屬於英文的比例
-
-
移除非英文的字元
-
append()串列方法
-
建立字母的字串
-
-
偵測英文單字
-
預設引數
-
計算百分比
-
-
總結
-
練習題
-
-
第12章 破解換位密碼
-
換位密碼破解程式的原始程式碼
-
換位密碼破解程式的執行範例
-
匯入模組
-
使用三重引號來處理多行字串
-
顯示破解訊息的結果
-
取得破解訊息
-
strip()字串方法
-
strip()字串方法的應用
-
破解失敗
-
-
呼叫main()函式
-
總結
-
練習題
-
-
第13章 仿射密碼所用的模算術模組
-
模算數
-
模除運算子(%)
-
找出計算最大公約數的因數
-
多重指定
-
使用歐幾里得演算法來尋找最大公約數
-
理解乘法密碼和仿射密碼的工作原理
-
選擇有效的乘法密鑰
-
以仿射密碼進行加密
-
仿射密碼的解密處理
-
找出模倒數
-
整數除法運算子
-
-
Cryptomath模組的原始程式碼
-
總結
-
練習題
-
-
第14章 仿射密碼程式設計
-
仿射密碼程式的原始程式碼
-
執行仿射密碼程式的範例
-
設定模組、常數和main()函式
-
計算和驗證密鑰
-
多元組資料型別
-
檢測出弱的密鑰值
-
仿射密碼可選用的密鑰值有幾個
-
-
編寫加密函式
-
編寫解密函式
-
產生隨機密鑰
-
呼叫main()函式
-
總結
-
練習題
-
-
第15章 破解仿射密碼
-
仿射密碼破解程式的原始程式碼
-
仿射密碼破解程式的執行範例
-
設定模組、常數和main()函式
-
仿射密碼破解函式
-
指數運算子
-
計算可選用密鑰的總數
-
continue陳述式
-
使用continue陳述式跳過程式碼
-
-
呼叫main()函式
-
總結
-
練習題
-
-
第16章 簡易替換密碼程式設計
-
簡易替換密碼的運作原理
-
簡易替換密碼程式的原始程式碼
-
簡易替換密碼程式的執行範例
-
設定模組、常數和main()函式
-
sort()串列方法
-
包裝函式
-
translateMessage()函式
-
isupper()和islower()字串方法
-
使用isupper()確保大寫
-
-
產生隨機密鑰
-
呼叫main()函式
-
總結
-
練習題
-
-
第17章 破解簡易替換密碼
-
使用單字模式來解密
-
找出單字模式
-
找出可能的解密字母
-
-
破解過程總覽
-
單字模式模組
-
簡易替換密碼破解程式的原始程式碼
-
簡易替換密碼破解程式執行範例
-
設定模組與常數
-
利用正規表示式來搜尋字元
-
設定main()函式
-
顯示破解結果給使用者看
-
建立密碼字母對映
-
建立空的對映
-
新增字母到對映中
-
兩個對映的交集
-
字母對映輔助函式的運作原理
-
識別對映中已解開的字母
-
測試removeSolvedLetterFromMapping()函式
-
-
hackSimpleSub()函式
-
replace()字串方法
-
解密訊息
-
在互動式Shell中解密
-
-
呼叫main()函式
-
總結
-
練習題
-
-
第18章 維吉尼亞密碼程式設計
-
在維吉尼亞密碼中使用多個字母密鑰
-
愈長的維吉尼亞密鑰愈安全
-
選用防止字典破解攻擊的密鑰
-
-
維吉尼亞密碼程式的原始程式碼
-
維吉尼亞密碼程式的執行範例
-
設定模組、常數和main()函式
-
使用串列-新增-合併的流程來建立字串
-
訊息的加密和解密
-
呼叫main()函式
-
總結
-
練習題
-
-
第19章 頻率分析
-
在文字中分析字母的出現頻率
-
比對字母出現的頻率
-
為簡易替換密碼計算頻率相符分數
-
為換位密碼計算頻率相符分數
-
在維吉尼亞密碼上使用頻率分析
-
-
比對字母頻率程式的原始程式碼
-
把字母依照ETAOIN順序存放
-
訊息中字母的計數
-
取得多元組的第1個成員
-
依照頻率來排序訊息中的字母
-
計算字串中的各字母數量
-
建立一個含有頻率計數和字母串列的字典
-
以ETAOIN反向順序對字母串列進行排序
-
以頻率來對字典串列進行排序
-
建立排序後字母的串列
-
-
計算訊息的頻率相符分數
-
總結
-
練習題
-
-
第20章 破解維吉尼亞密碼
-
以暴力法使用字典攻擊破解維吉尼亞密碼
-
維吉尼亞字典攻擊破解程式的原始程式碼
-
維吉尼亞字典攻擊破解程式的執行範例
-
關於維吉尼亞字典攻擊破解程式
-
使用卡西斯基檢驗找出密鑰長度
-
尋找重複的序列
-
取得間距的因數
-
從字串取得每隔N個的字母
-
使用頻率分析來破解各個子密鑰
-
以暴力法處理所有可能的密鑰
-
-
維吉尼亞密碼破解程式的原始程式碼
-
維吉尼亞密碼破解程式的執行範例
-
匯入模組與設定main()函式
-
找出重複序列
-
計算間距的因數
-
使用set()函式刪除重複內容
-
刪除重複因數與排序串列
-
找出最常見的因數
-
-
找出最有可能的密鑰長度
-
extend()串列方法
-
擴展repeatSeqSpacings字典
-
從factorsByCount取得因數
-
-
取得使用相同子密鑰加密的字母
-
使用可能的密鑰長度來進行解密
-
print()的end關鍵字引數
-
以靜默模式執行程式或把訊息輸出給使用者
-
找出子密鑰的可能組合
-
使用正確的大小寫印出解密文字
-
-
返回破解訊息
-
找到潛在密鑰時中斷迴圈
-
以暴力法處理所有密鑰長度
-
-
呼叫main()函式
-
修改破解程式的常數
-
總結
-
練習題
-
-
第21章 一次性密碼本密碼
-
不能破解的一次性密碼本密碼
-
讓密鑰長度等於訊息長度
-
讓密鑰真的隨機
-
避免二次密碼本
-
為什麼二次密碼本等同於維吉尼亞密碼
-
-
總結
-
練習題
-
-
第22章 尋找與產生質數
-
什麼是質數
-
質數模組的原始程式碼
-
質數模組的執行範例
-
試除演算法的運作原理
-
實作試除演算法檢測
-
埃拉托斯特尼篩法
-
使用埃拉托斯特尼篩法生成質數
-
米勒-拉賓質數判定演算法
-
找出大型質數
-
生成大型質數
-
總結
-
練習題
-
-
第23章 生成公鑰密碼的公鑰
-
公鑰密碼學
-
驗證(Authentication)的問題
-
數位簽章(Digital signatures)
-
小心中間人攻擊(MITM attack)
-
-
生成公鑰和私鑰的步驟
-
公鑰生成程式的原始程式碼
-
公鑰生成程式的執行範例
-
建立main()函式
-
以generateKey()函式生成密鑰
-
計算e值
-
計算d值
-
返回密鑰
-
-
使用makeKeyFiles()函式來建立密鑰檔
-
呼叫main()函式
-
混和密碼體制
-
總結
-
練習題
-
-
第24章 公鑰密碼程式設計
-
公鑰密碼的原理
-
建立區塊
-
把字串轉換成區塊
-
公鑰密碼加密和解密所使用的數學
-
把區塊轉換成字串
-
為什麼公鑰密碼不能破解
-
-
公鑰密碼程式的原始程式碼
-
公鑰密碼程式的執行範例
-
設定程式
-
程式怎麼決定是要進行加密或解密的
-
使用getBlocksFromText()把字串轉換成區塊
-
min()與max()函式
-
把區塊存入blockInt
-
-
使用getTextFromBlocks()進行解密
-
使用insert()串列方法
-
把訊息串列合併成字串
-
-
編寫encryptMessage()函式
-
編寫decryptMessage()函式
-
從密鑰檔中讀取公鑰和私鑰
-
把加密內容寫入檔案中
-
從檔案解密訊息
-
呼叫main()函式
-
總結
-
-
附錄 偵錯Python程式碼
-
Debugger的操作方式
-
對反轉密碼程式進行偵錯處理
-
設定中斷點
-
總結
-
- 出版地 : 臺灣
- 語言 : 繁體中文
評分與評論
請登入後再留言與評分