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

    學習Python程式設計和密碼的破解技巧

    收集中
    US$16.24
    學習Python程式設計和密碼的破解技巧

    本書教您學習製作與破解密碼的相關演算法知識,以及如何在Python中編寫程式來實作和傳送機密訊息!

    本書前幾章會教您Python基礎的程式設計知識和技巧,接著學習各種經典傳統密碼的相關知識原理,以及怎麼使用這類傳統密碼進行加密解密,並編寫、實作、測試和破解程式。本書所講述的包括反轉密碼、凱撒密碼、換位密碼、仿射密碼、簡易替換密碼、維吉尼亞密碼等,最後還有公鑰密碼,這個保護著目前線上交易加密應用,像數位簽章、email和比特幣等都有使用的技術。

    書中所有範例程式都會完整列出,並逐行解說其Python技巧和運作原理。讀完本書,您不僅學會怎麼在Python中編寫程式碼,您還會有很多完整的程式實例可實證您的學習成果!

    本書內容還包括:
    ‧教您結合迴圈、變數和流程控制等技巧在實際的程式上應用
    ‧教您使用字典攻擊馬上檢測解密訊息是否為英文或只是亂碼
    ‧教您製作測試程式,用來確保加密和解密的處理是正確無誤的
    ‧以完整的仿射密碼實例教您活用模除運算等數學概念來加密訊息
    ‧教您活用暴力破解法與頻率分析等破解技術

    從範例程式中動手實作與體會是最好的學習方式,本書有完整眾多的實例能讓您能夠享受學習Python與密碼學的樂趣。

    章節目錄

    • 1-1
      封面頁
    • 1-2
      書名頁
    • 1-3
      作者簡介
    • 1-4
      技術審校者簡介
    • 1-5
      致謝
    • 1-6
      目錄
    • 1-7
      簡介
    • 1-8
      適合閱讀本書的讀者
    • 1-9
      本書內容
    • 1-10
      如何使用本書
    • 1-11
      輸入原始程式碼
    • 1-12
      檢查輸入的錯誤
    • 1-13
      本書編寫程式的慣例
    • 1-14
      線上資源
    • 1-15
      下載與安裝Python
    • 1-16
      Windows 版安裝指引
    • 1-17
      Mac OS 版安裝指引
    • 1-18
      Ubuntu 版安裝指示
    • 1-19
      下載pyperclip.py
    • 1-20
      開啟IDLE
    • 1-21
      總結
    • 1-22
      CH01 製作紙上的密碼工具
    • 1-23
      什麼是密碼學?
    • 1-24
      代碼與密碼
    • 1-25
      凱撒密碼
    • 1-26
      密碼輪盤
    • 1-27
      以密碼輪盤進行加密
    • 1-28
      以密碼輪盤進行解密
    • 1-29
      以數學算術來加密和解密
    • 1-30
      為什麼雙重加密不可行
    • 1-31
      總結
    • 1-32
      練習題
    • 1-33
      CH02 在互動式Shell 中程式設計
    • 1-34
      一些簡易的數學表示式
    • 1-35
      整數與浮點數
    • 1-36
      表示式
    • 1-37
      運算子的順序
    • 1-38
      表示式運算求值
    • 1-39
      以變數來儲存值
    • 1-40
      覆寫變數
    • 1-41
      變數名稱
    • 1-42
      總結
    • 1-43
      練習題
    • 1-44
      CH03 字串與編寫程式
    • 1-45
      使用字串值來處理文字
    • 1-46
      以+運算子連接字串
    • 1-47
      使用* 運算子複製字串
    • 1-48
      使用索引足標從字串中擷取字元
    • 1-49
      使用print()函式印出值
    • 1-50
      印出轉義字元
    • 1-51
      單引號與雙引號
    • 1-52
      在IDLE 的File Editor 中編寫程式
    • 1-53
      「Hello, world!」的原始程式碼
    • 1-54
      使用Online diff tool 檢查程式碼
    • 1-55
      使用IDLE 存取您的程式
    • 1-56
      儲存您的程式
    • 1-57
      執行您的程式
    • 1-58
      開啟您儲存的程式檔
    • 1-59
      「Hello world!」程式的運作原理
    • 1-60
      注釋
    • 1-61
      對使用者印出說明指示
    • 1-62
      取得使用者輸入的東西
    • 1-63
      結束程式
    • 1-64
      總結
    • 1-65
      練習題
    • 1-66
      CH04 反轉密碼
    • 1-67
      反轉密碼程式的原始程式碼
    • 1-68
      反轉密碼程式的執行範例
    • 1-69
      設計注釋與變數
    • 1-70
      找出字串的長度
    • 1-71
      while 迴圈簡介
    • 1-72
      布林資料型別
    • 1-73
      比較運算子
    • 1-74
      區塊
    • 1-75
      while 迴圈陳述式
    • 1-76
      「增長」某個字串
    • 1-77
      利用input()輸入來改進程式
    • 1-78
      總結
    • 1-79
      練習題
    • 1-80
      CH05 凱撒密碼
    • 1-81
      凱撒密碼程式的原始程式碼
    • 1-82
      凱撒密碼程式的執行範例
    • 1-83
      匯入模組與設定變數
    • 1-84
      常數與變數
    • 1-85
      for 迴圈陳述句
    • 1-86
      迴圈範例
    • 1-87
      與for 迴圈相同作用的while 迴圈
    • 1-88
      if 陳述句
    • 1-89
      if 陳述句範例
    • 1-90
      else 陳述句
    • 1-91
      elif 陳述句
    • 1-92
      in 和not in 運算子
    • 1-93
      find() 字串方法
    • 1-94
      加密和解密符號
    • 1-95
      繞回開頭或尾端倒數回去
    • 1-96
      處理不在符號集中的符號
    • 1-97
      顯示和複製轉換後的字串
    • 1-98
      加密其他符號
    • 1-99
      總結
    • 1-100
      練習題
    • 1-101
      CH06 以暴力破解凱撒密碼
    • 1-102
      凱撒密碼破解程式的原始程式碼
    • 1-103
      凱撒密碼破解程式的執行範例
    • 1-104
      設定變數
    • 1-105
      以range()函式進行迴圈
    • 1-106
      解密訊息
    • 1-107
      使用字串格式化來編排密鑰和解密訊息
    • 1-108
      總結
    • 1-109
      練習題
    • 1-110
      CH07 使用換位密碼進行加密
    • 1-111
      換位密碼的運作原理
    • 1-112
      以手動方式加密訊息
    • 1-113
      建立加密程式
    • 1-114
      換位密碼程式的原始程式碼
    • 1-115
      換位密碼程式的執行範例
    • 1-116
      使用def 陳述句建立自己的函式
    • 1-117
      定義有引數和參數的函式
    • 1-118
      參數的更改只存在於函式內部
    • 1-119
      定義main()函式
    • 1-120
      把密鑰和訊息當成引數傳入
    • 1-121
      串列資料型別
    • 1-122
      重新指定項目到串列中
    • 1-123
      串列中的串列
    • 1-124
      使用len() 和in 運算子來處理串列
    • 1-125
      使用+和* 運算子來連接和複製串列
    • 1-126
      換位加密的演算法
    • 1-127
      擴增指定運算子
    • 1-128
      利用currentIndex 在message 字串中逐個字元移動
    • 1-129
      join() 字串方法
    • 1-130
      返回值與返回陳述式
    • 1-131
      return 陳述式的範例
    • 1-132
      返回加密後的密文
    • 1-133
      __name__變數
    • 1-134
      總結
    • 1-135
      練習題
    • 1-136
      CH08 使用換位密碼進行解密
    • 1-137
      在紙上進行換位密碼的解密處理
    • 1-138
      換位密碼解密程式的原始程式碼
    • 1-139
      換位密碼解密程式的執行範例
    • 1-140
      匯入模組與設定main()函式
    • 1-141
      使用密鑰來解密訊息
    • 1-142
      round()、math.ceil() 和math.floor() 函式
    • 1-143
      decryptMessage() 函式
    • 1-144
      布林運算子
    • 1-145
      調整欄和列的變數
    • 1-146
      呼叫main() 函式
    • 1-147
      總結
    • 1-148
      練習題
    • 1-149
      CH09 編寫程式來測試您的程式
    • 1-150
      換位密碼測試程式的原始程式碼
    • 1-151
      換位密碼測試程式的執行範例
    • 1-152
      匯入模組
    • 1-153
      建立偽隨機數
    • 1-154
      建立隨機字串
    • 1-155
      隨機多次複製字串
    • 1-156
      串列變數使用參照
    • 1-157
      傳參照
    • 1-158
      使用copy.deepcopy() 來複製串列
    • 1-159
      random.shuffle() 函式
    • 1-160
      隨機重新排放字串中的字元
    • 1-161
      測試每個訊息
    • 1-162
      檢測密碼程式是否正確運作和結束程式執行
    • 1-163
      呼叫main()函式
    • 1-164
      測試執行這個測試程式
    • 1-165
      總結
    • 1-166
      練習題
    • 1-167
      CH10 加密和解密檔案
    • 1-168
      純文字檔
    • 1-169
      換位檔案密碼程式的原始程式碼
    • 1-170
      換位檔案密碼程式的執行範例
    • 1-171
      處理檔案
    • 1-172
      開啟檔案
    • 1-173
      寫入與關閉檔案
    • 1-174
      讀取檔案
    • 1-175
      設定main()函式
    • 1-176
      檢測檔案是否存在
    • 1-177
      os.path.exists() 函式
    • 1-178
      使用os.path.exists() 函式檢查輸入檔是否存在
    • 1-179
      利用字串方法讓使用者輸入更有彈性
    • 1-180
      upper()、lower() 和title() 字串方法
    • 1-181
      startswith() 和endswith() 字串方法
    • 1-182
      在程式中使用字串方法
    • 1-183
      讀取輸入檔
    • 1-184
      計算加密或解密所花費的時間
    • 1-185
      time 模組和time.time() 函式
    • 1-186
      在程式中使用time.time() 函式
    • 1-187
      寫入輸出檔
    • 1-188
      呼叫main() 函式
    • 1-189
      總結
    • 1-190
      練習題
    • 1-191
      CH11 以程式來偵測英文
    • 1-192
      電腦要如何理解英文字
    • 1-193
      偵測英文模組的原始程式碼
    • 1-194
      偵測英文模組的執行範例
    • 1-195
      說明指引與設定常數
    • 1-196
      字典資料型別
    • 1-197
      字典和串列的差異
    • 1-198
      在字典中新增或變更項目
    • 1-199
      在字典上使用len() 函式
    • 1-200
      在字典上使用in 運算子
    • 1-201
      在字典中搜尋比在串列中搜尋快
    • 1-202
      在字典上使用for 迴圈
    • 1-203
      字典檔的實作處理
    • 1-204
      split() 方法
    • 1-205
      把字典檔分割成單字
    • 1-206
      返回字典資料型別
    • 1-207
      計算訊息中英文單字的數量
    • 1-208
      除以0 的錯誤
    • 1-209
      計算識別為英文單字的個數
    • 1-210
      float()、int()、str() 函式與整數除法
    • 1-211
      找出訊息文字中屬於英文的比例
    • 1-212
      移除非英文的字元
    • 1-213
      append() 串列方法
    • 1-214
      建立字母的字串
    • 1-215
      偵測英文單字
    • 1-216
      預設引數
    • 1-217
      計算百分比
    • 1-218
      總結
    • 1-219
      練習題
    • 1-220
      CH12 破解換位密碼
    • 1-221
      換位密碼破解程式的原始程式碼
    • 1-222
      換位密碼破解程式的執行範例
    • 1-223
      匯入模組
    • 1-224
      使用三重引號來處理多行字串
    • 1-225
      顯示破解訊息的結果
    • 1-226
      取得破解訊息
    • 1-227
      strip() 字串方法
    • 1-228
      strip() 字串方法的應用
    • 1-229
      破解失敗
    • 1-230
      呼叫main() 函式
    • 1-231
      總結
    • 1-232
      練習題
    • 1-233
      CH13 仿射密碼所用的模算術模組
    • 1-234
      模算數
    • 1-235
      模除運算子(%)
    • 1-236
      找出計算最大公約數的因數
    • 1-237
      多重指定
    • 1-238
      使用歐幾里得演算法來尋找最大公約數
    • 1-239
      理解乘法密碼和仿射密碼的工作原理
    • 1-240
      選擇有效的乘法密鑰
    • 1-241
      以仿射密碼進行加密
    • 1-242
      仿射密碼的解密處理
    • 1-243
      找出模倒數
    • 1-244
      整數除法運算子
    • 1-245
      Cryptomath 模組的原始程式碼
    • 1-246
      總結
    • 1-247
      練習題
    • 1-248
      CH14 仿射密碼程式設計
    • 1-249
      仿射密碼程式的原始程式碼
    • 1-250
      執行仿射密碼程式的範例
    • 1-251
      設定模組、常數和main()函式
    • 1-252
      計算和驗證密鑰
    • 1-253
      多元組資料型別
    • 1-254
      檢測出弱的密鑰值
    • 1-255
      仿射密碼可選用的密鑰值有幾個
    • 1-256
      編寫加密函式
    • 1-257
      編寫解密函式
    • 1-258
      產生隨機密鑰
    • 1-259
      呼叫main() 函式
    • 1-260
      總結
    • 1-261
      練習題
    • 1-262
      CH15 破解仿射密碼
    • 1-263
      仿射密碼破解程式的原始程式碼
    • 1-264
      仿射密碼破解程式的執行範例
    • 1-265
      設定模組、常數和main()函式
    • 1-266
      仿射密碼破解函式
    • 1-267
      指數運算子
    • 1-268
      計算可選用密鑰的總數
    • 1-269
      continue 陳述式
    • 1-270
      使用continue 陳述式跳過程式碼
    • 1-271
      呼叫main() 函式
    • 1-272
      總結
    • 1-273
      練習題
    • 1-274
      CH16 簡易替換密碼程式設計
    • 1-275
      簡易替換密碼的運作原理
    • 1-276
      簡易替換密碼程式的原始程式碼
    • 1-277
      簡易替換密碼程式的執行範例
    • 1-278
      設定模組、常數和main() 函式
    • 1-279
      sort() 串列方法
    • 1-280
      包裝函式
    • 1-281
      translateMessage()函式
    • 1-282
      isupper() 和islower() 字串方法
    • 1-283
      使用isupper() 確保大寫
    • 1-284
      產生隨機密鑰
    • 1-285
      呼叫main() 函式
    • 1-286
      總結
    • 1-287
      練習題
    • 1-288
      CH17 破解簡易替換密碼
    • 1-289
      使用單字模式來解密
    • 1-290
      找出單字模式
    • 1-291
      找出可能的解密字母
    • 1-292
      破解過程總覽
    • 1-293
      單字模式模組
    • 1-294
      簡易替換密碼破解程式的原始程式碼
    • 1-295
      簡易替換密碼破解程式執行範例
    • 1-296
      設定模組與常數
    • 1-297
      利用正規表示式來搜尋字元
    • 1-298
      設定main() 函式
    • 1-299
      顯示破解結果給使用者看
    • 1-300
      建立密碼字母對映
    • 1-301
      建立空的對映
    • 1-302
      新增字母到對映中
    • 1-303
      兩個對映的交集
    • 1-304
      字母對映輔助函式的運作原理
    • 1-305
      識別對映中已解開的字母
    • 1-306
      測試removeSolvedLetterFromMapping() 函式
    • 1-307
      hackSimpleSub()函式
    • 1-308
      replace() 字串方法
    • 1-309
      解密訊息
    • 1-310
      在互動式Shell 中解密
    • 1-311
      呼叫main() 函式
    • 1-312
      總結
    • 1-313
      練習題
    • 1-314
      CH18 維吉尼亞密碼程式設計
    • 1-315
      在維吉尼亞密碼中使用多個字母密鑰
    • 1-316
      愈長的維吉尼亞密鑰愈安全
    • 1-317
      選用防止字典破解攻擊的密鑰
    • 1-318
      維吉尼亞密碼程式的原始程式碼
    • 1-319
      維吉尼亞密碼程式的執行範例
    • 1-320
      設定模組、常數和main()函式
    • 1-321
      使用串列-新增-合併的流程來建立字串
    • 1-322
      訊息的加密和解密
    • 1-323
      呼叫main() 函式
    • 1-324
      總結
    • 1-325
      練習題
    • 1-326
      CH19 頻率分析
    • 1-327
      在文字中分析字母的出現頻率
    • 1-328
      比對字母出現的頻率
    • 1-329
      為簡易替換密碼計算頻率相符分數
    • 1-330
      為換位密碼計算頻率相符分數
    • 1-331
      在維吉尼亞密碼上使用頻率分析
    • 1-332
      比對字母頻率程式的原始程式碼
    • 1-333
      把字母依照ETAOIN 順序存放
    • 1-334
      訊息中字母的計數
    • 1-335
      取得多元組的第1 個成員
    • 1-336
      依照頻率來排序訊息中的字母
    • 1-337
      計算字串中的各字母數量
    • 1-338
      建立一個含有頻率計數和字母串列的字典
    • 1-339
      以ETAOIN 反向順序對字母串列進行排序
    • 1-340
      以頻率來對字典串列進行排序
    • 1-341
      建立排序後字母的串列
    • 1-342
      計算訊息的頻率相符分數
    • 1-343
      總結
    • 1-344
      練習題
    • 1-345
      CH20 破解維吉尼亞密碼
    • 1-346
      以暴力法使用字典攻擊破解維吉尼亞密碼
    • 1-347
      維吉尼亞字典攻擊破解程式的原始程式碼
    • 1-348
      維吉尼亞字典攻擊破解程式的執行範例
    • 1-349
      關於維吉尼亞字典攻擊破解程式
    • 1-350
      使用卡西斯基檢驗找出密鑰長度
    • 1-351
      尋找重複的序列
    • 1-352
      取得間距的因數
    • 1-353
      從字串取得每隔N 個的字母
    • 1-354
      使用頻率分析來破解各個子密鑰
    • 1-355
      以暴力法處理所有可能的密鑰
    • 1-356
      維吉尼亞密碼破解程式的原始程式碼
    • 1-357
      維吉尼亞密碼破解程式的執行範例
    • 1-358
      匯入模組與設定main()函式
    • 1-359
      找出重複序列
    • 1-360
      計算間距的因數
    • 1-361
      使用set() 函式刪除重複內容
    • 1-362
      刪除重複因數與排序串列
    • 1-363
      找出最常見的因數
    • 1-364
      找出最有可能的密鑰長度
    • 1-365
      extend() 串列方法
    • 1-366
      擴展repeatSeqSpacings 字典
    • 1-367
      從factorsByCount 取得因數
    • 1-368
      取得使用相同子密鑰加密的字母
    • 1-369
      使用可能的密鑰長度來進行解密
    • 1-370
      print() 的end 關鍵字引數
    • 1-371
      以靜默模式執行程式或把訊息輸出給使用者
    • 1-372
      找出子密鑰的可能組合
    • 1-373
      使用正確的大小寫印出解密文字
    • 1-374
      返回破解訊息
    • 1-375
      找到潛在密鑰時中斷迴圈
    • 1-376
      以暴力法處理所有密鑰長度
    • 1-377
      呼叫main()函式
    • 1-378
      修改破解程式的常數
    • 1-379
      總結
    • 1-380
      練習題
    • 1-381
      CH21 一次性密碼本密碼
    • 1-382
      不能破解的一次性密碼本密碼
    • 1-383
      讓密鑰長度等於訊息長度
    • 1-384
      讓密鑰真的隨機
    • 1-385
      避免二次密碼本
    • 1-386
      為什麼二次密碼本等同於維吉尼亞密碼
    • 1-387
      總結
    • 1-388
      練習題
    • 1-389
      CH22 尋找與產生質數
    • 1-390
      什麼是質數
    • 1-391
      質數模組的原始程式碼
    • 1-392
      質數模組的執行範例
    • 1-393
      試除演算法的運作原理
    • 1-394
      實作試除演算法檢測
    • 1-395
      埃拉托斯特尼篩法
    • 1-396
      使用埃拉托斯特尼篩法生成質數
    • 1-397
      米勒-拉賓質數判定演算法
    • 1-398
      找出大型質數
    • 1-399
      生成大型質數
    • 1-400
      總結
    • 1-401
      練習題
    • 1-402
      CH23 生成公鑰密碼的公鑰
    • 1-403
      公鑰密碼學
    • 1-404
      驗證(Authentication)的問題
    • 1-405
      數位簽章(Digital signatures)
    • 1-406
      小心中間人攻擊(MITM attack)
    • 1-407
      生成公鑰和私鑰的步驟
    • 1-408
      公鑰生成程式的原始程式碼
    • 1-409
      公鑰生成程式的執行範例
    • 1-410
      建立main() 函式
    • 1-411
      以generateKey()函式生成密鑰
    • 1-412
      計算e 值
    • 1-413
      計算d 值
    • 1-414
      返回密鑰
    • 1-415
      使用makeKeyFiles()函式來建立密鑰檔
    • 1-416
      呼叫main()函式
    • 1-417
      混和密碼體制
    • 1-418
      總結
    • 1-419
      練習題
    • 1-420
      CH24 公鑰密碼程式設計
    • 1-421
      公鑰密碼的原理
    • 1-422
      建立區塊
    • 1-423
      把字串轉換成區塊
    • 1-424
      公鑰密碼加密和解密所使用的數學
    • 1-425
      把區塊轉換成字串
    • 1-426
      為什麼公鑰密碼不能破解
    • 1-427
      公鑰密碼程式的原始程式碼
    • 1-428
      公鑰密碼程式的執行範例
    • 1-429
      設定程式
    • 1-430
      程式怎麼決定是要進行加密或解密的
    • 1-431
      使用getBlocksFromText()把字串轉換成區塊
    • 1-432
      min() 與max() 函式
    • 1-433
      把區塊存入blockInt
    • 1-434
      使用getTextFromBlocks() 進行解密
    • 1-435
      使用insert() 串列方法
    • 1-436
      把訊息串列合併成字串
    • 1-437
      編寫encryptMessage()函式
    • 1-438
      編寫decryptMessage()函式
    • 1-439
      從密鑰檔中讀取公鑰和私鑰
    • 1-440
      把加密內容寫入檔案中
    • 1-441
      從檔案解密訊息
    • 1-442
      呼叫main() 函式
    • 1-443
      總結
    • 1-444
      附錄 偵錯Python 程式碼
    • 1-445
      Debugger 的操作方式
    • 1-446
      對反轉密碼程式進行偵錯處理
    • 1-447
      設定中斷點
    • 1-448
      總結
    • 1-449
      版權頁
    • 1-450
      封底頁

    試閱影片

    | 尚無內容

    常見問答

    您可以透過手機、平板或是電腦登入 HiSKIO 平台,在【我的學習】>【我的書籍】頁面,選擇想看的電子書。

    猜你喜歡

    用戶評價

    | 收集中

    購買前問答

    | 尚無內容

    銷售方案