Python 密碼學編程 Python密码学编程

[美] Al Sweigart 斯維加特

  • 出版商: 人民郵電
  • 出版日期: 2016-08-01
  • 定價: $414
  • 售價: 8.5$352
  • 語言: 簡體中文
  • 頁數: 324
  • 裝訂: 平裝
  • ISBN: 7115424292
  • ISBN-13: 9787115424297
  • 相關分類: Python程式語言資訊安全
  • 已絕版

買這商品的人也買了...

商品描述

<內容簡介>

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