0人評分過此書

Python駭客密碼:加密、解密與破解實例應用

出版日期
2021
閱讀格式
PDF
書籍分類
學科分類
ISBN
9789865020804

本館館藏

借閱規則
當前可使用人數 30
借閱天數 14
線上看 0
借閱中 0
選擇分享方式

推薦本館採購書籍

您可以將喜歡的電子書推薦給圖書館,圖書館會參考讀者意見進行採購

讀者資料
圖書館
* 姓名
* 身分
系所
* E-mail
※ 我們會寄送一份副本至您填寫的Email中
電話
※ 電話格式為 區碼+電話號碼(ex. 0229235151)/ 手機格式為 0900111111
* 請輸入驗證碼
學習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的操作方式
    • 對反轉密碼程式進行偵錯處理
    • 設定中斷點
    • 總結
  • 出版地 臺灣
  • 語言 繁體中文

評分與評論

請登入後再留言與評分
幫助
您好,請問需要甚麼幫助呢?
使用指南

客服專線:0800-000-747

服務時間:週一至週五 AM 09:00~PM 06:00

loading