Table of Contents for
Cracking Codes with Python
Close
Version ebook
/
Retour
Cracking Codes with Python
by Al Sweigart
Published by No Starch Press, 2018
Cover Page
Cracking Codes with Python
Title Page
Copyright Page
Dedication
About the Author
About the Technical Reviewers
Brief Contents
Contents in Detail
Acknowledgments
Introduction
Chapter 1: Making Paper Cryptography Tools
Chapter 2: Programming in the Interactive Shell
Chapter 3: Strings and Writing Programs
Chapter 4: The Reverse Cipher
Chapter 5: The Caesar Cipher
Chapter 6: Hacking the Caesar Cipher with Brute-Force
Chapter 7: Encrypting with the Transposition Cipher
Chapter 8: Decrypting with the Transposition Cipher
Chapter 9: Programming a Program to Test Your Program
Chapter 10: Encrypting and Decrypting Files
Chapter 11: Detecting English Programmatically
Chapter 12: Hacking the Transposition Cipher
Chapter 13: A Modular Arithmetic Module for the Affine Cipher
Chapter 14: Programming the Affine Cipher
Chapter 15: Hacking the Affine Cipher
Chapter 16: Programming the Simple Substitution Cipher
Chapter 17: Hacking the Simple Substitution Cipher
Chapter 18: Programming the Vigenère Cipher
Chapter 19: Frequency Analysis
Chapter 20: Hacking the Vigenère Cipher
Chapter 21: The One-Time Pad Cipher
Chapter 22: Finding and Generating Prime Numbers
Chapter 23: Generating Keys for the Public Key Cipher
Chapter 24: Programming the Public Key Cipher
Appendix Debugging Python Code
Index
Resources
Cracking Codes with Python
Contents in Detail
Cover Page
Title Page
Copyright Page
Dedication
About the Author
About the Technical Reviewers
Brief Contents
Contents in Detail
Acknowledgments
Introduction
Who Should Read This Book?
What’s in This Book?
How to Use This Book
Downloading and Installing Python
Downloading pyperclip.py
Starting IDLE
Summary
Chapter 1: Making Paper Cryptography Tools
What Is Cryptography?
Codes vs. Ciphers
The Caesar Cipher
Why Double Encryption Doesn’t Work
Summary
Practice Questions
Chapter 2: Programming in the Interactive Shell
Some Simple Math Expressions
Storing Values with Variables
Summary
Practice Questions
Chapter 3: Strings and Writing Programs
Working with Text Using String Values
Printing Values with the print() Function
Printing Escape Characters
Quotes and Double Quotes
Writing Programs in IDLE’s File Editor
Source Code for the “Hello, World!” Program
Checking Your Source Code with the Online Diff Tool
Using IDLE to Access Your Program Later
How the “Hello, World!” Program Works
Summary
Practice Questions
Chapter 4: The Reverse Cipher
Source Code for the Reverse Cipher Program
Sample Run of the Reverse Cipher Program
Setting Up Comments and Variables
Finding the Length of a String
Introducing the while Loop
Improving the Program with an input() Prompt
Summary
Practice Questions
Chapter 5: The Caesar Cipher
Source Code for the Caesar Cipher Program
Sample Run of the Caesar Cipher Program
Importing Modules and Setting Up Variables
Constants and Variables
The for Loop Statement
The if Statement
The in and not in Operators
The find() String Method
Encrypting and Decrypting Symbols
Displaying and Copying the Translated String
Encrypting Other Symbols
Summary
Practice Questions
Chapter 6: Hacking the Caesar Cipher with Brute-Force
Source Code for the Caesar Cipher Hacker Program
Sample Run of the Caesar Cipher Hacker Program
Setting Up Variables
Looping with the range() Function
Decrypting the Message
Using String Formatting to Display the Key and Decrypted Messages
Summary
Practice Question
Chapter 7: Encrypting with the Transposition Cipher
How the Transposition Cipher Works
Source Code for the Transposition Cipher Encryption Program
Sample Run of the Transposition Cipher Encryption Program
Creating Your Own Functions with def Statements
Passing the Key and Message As Arguments
The List Data Type
The Transposition Encryption Algorithm
Augmented Assignment Operators
Moving currentIndex Through the Message
The join() String Method
Return Values and return Statements
The __name__ Variable
Summary
Practice Questions
Chapter 8: Decrypting with the Transposition Cipher
How to Decrypt with the Transposition Cipher on Paper
Source Code for the Transposition Cipher Decryption Program
Sample Run of the Transposition Cipher Decryption Program
Importing Modules and Setting Up the main() Function
Decrypting the Message with the Key
Calling the main() Function
Summary
Practice Questions
Chapter 9: Programming a Program to Test Your Program
Source Code for the Transposition Cipher Tester Program
Sample Run of the Transposition Cipher Tester Program
Importing the Modules
Creating Pseudorandom Numbers
Creating a Random String
Testing Each Message
Checking Whether the Cipher Worked and Ending the Program
Calling the main() Function
Testing the Test Program
Summary
Practice Questions
Chapter 10: Encrypting and Decrypting Files
Plain Text Files
Source Code for the Transposition File Cipher Program
Sample Run of the Transposition File Cipher Program
Working with Files
Setting Up the main() Function
Checking Whether a File Exists
Using String Methods to Make User Input More Flexible
Reading the Input File
Measuring the Time It Took to Encrypt or Decrypt
Writing the Output File
Calling the main() Function
Summary
Practice Questions
Chapter 11: Detecting English Programmatically
How Can a Computer Understand English?
Source Code for the Detect English Module
Sample Run of the Detect English Module
Instructions and Setting Up Constants
The Dictionary Data Type
Implementing the Dictionary File
Counting the Number of English Words in message
Removing Non-Letter Characters
Detecting English Words
Summary
Practice Questions
Chapter 12: Hacking the Transposition Cipher
Source Code of the Transposition Cipher Hacker Program
Sample Run of the Transposition Cipher Hacker Program
Importing the Modules
Multiline Strings with Triple Quotes
Displaying the Results of Hacking the Message
Getting the Hacked Message
Calling the main() Function
Summary
Practice Questions
Chapter 13: A Modular Arithmetic Module for the Affine Cipher
Modular Arithmetic
The Modulo Operator
Finding Factors to Calculate the Greatest Common Divisor
Multiple Assignment
Euclid’s Algorithm for Finding the GCD
Understanding How the Multiplicative and Affine Ciphers Work
Source Code for the Cryptomath Module
Summary
Practice Questions
Chapter 14: Programming the Affine Cipher
Source Code for the Affine Cipher Program
Sample Run of the Affine Cipher Program
Setting Up Modules, Constants, and the main() Function
Calculating and Validating the Keys
Writing the Encryption Function
Writing the Decryption Function
Generating Random Keys
Calling the main() Function
Summary
Practice Questions
Chapter 15: Hacking the Affine Cipher
Source Code for the Affine Cipher Hacker Program
Sample Run of the Affine Cipher Hacker Program
Setting Up Modules, Constants, and the main() Function
The Affine Cipher Hacking Function
Calling the main() Function
Summary
Practice Questions
Chapter 16: Programming the Simple Substitution Cipher
How the Simple Substitution Cipher Works
Source Code for the Simple Substitution Cipher Program
Sample Run of the Simple Substitution Cipher Program
Setting Up Modules, Constants, and the main() Function
The sort() List Method
Wrapper Functions
The translateMessage() Function
Generating a Random Key
Calling the main() Function
Summary
Practice Questions
Chapter 17: Hacking the Simple Substitution Cipher
Using Word Patterns to Decrypt
Overview of the Hacking Process
The Word Pattern Modules
Source Code for the Simple Substitution Hacking Program
Sample Run of the Simple Substitution Hacking Program
Setting Up Modules and Constants
Finding Characters with Regular Expressions
Setting Up the main() Function
Displaying Hacking Results to the User
Creating a Cipherletter Mapping
The hackSimpleSub() Function
Calling the main() Function
Summary
Practice Questions
Chapter 18: Programming the Vigenère Cipher
Using Multiple Letter Keys in the Vigenère Cipher
Source Code for the Vigenère Cipher Program
Sample Run of the Vigenère Cipher Program
Setting Up Modules, Constants, and the main() Function
Building Strings with the List-Append-Join Process
Encrypting and Decrypting the Message
Calling the main() Function
Summary
Practice Questions
Chapter 19: Frequency Analysis
Analyzing the Frequency of Letters in Text
Matching Letter Frequencies
Source Code for Matching Letter Frequencies
Storing the Letters in ETAOIN Order
Counting the Letters in a Message
Getting the First Member of a Tuple
Ordering the Letters in the Message by Frequency
Calculating the Frequency Match Score of the Message
Summary
Practice Questions
Chapter 20: Hacking the Vigenère Cipher
Using a Dictionary Attack to Brute-Force the Vigenère Cipher
Source Code for the Vigenère Dictionary Hacker Program
Sample Run of the Vigenère Dictionary Hacker Program
About the Vigenère Dictionary Hacker Program
Using Kasiski Examination to Find the Key’s Length
Source Code for the Vigenère Hacking Program
Sample Run of the Vigenère Hacking Program
Importing Modules and Setting Up the main() Function
Finding Repeated Sequences
Calculating the Factors of the Spacings
Finding the Most Likely Key Lengths
Getting Letters Encrypted with the Same Subkey
Attempting Decryption with a Likely Key Length
Returning the Hacked Message
Calling the main() Function
Modifying the Constants of the Hacking Program
Summary
Practice Questions
Chapter 21: The One-Time Pad Cipher
The Unbreakable One-Time Pad Cipher
Summary
Practice Questions
Chapter 22: Finding and Generating Prime Numbers
What Is a Prime Number?
Source Code for the Prime Numbers Module
Sample Run of the Prime Numbers Module
How the Trial Division Algorithm Works
Implementing the Trial Division Algorithm Test
The Sieve of Eratosthenes
Generating Prime Numbers with the Sieve of Eratosthenes
The Rabin-Miller Primality Algorithm
Finding Large Prime Numbers
Generating Large Prime Numbers
Summary
Practice Questions
Chapter 23: Generating Keys for the Public Key Cipher
Public Key Cryptography
The Problem with Authentication
Steps for Generating Public and Private Keys
Source Code for the Public Key Generation Program
Sample Run of the Public Key Generation Program
Creating the main() Function
Generating Keys with the generateKey() Function
Creating Key Files with the makeKeyFiles() Function
Calling the main() Function
Hybrid Cryptosystems
Summary
Practice Questions
Chapter 24: Programming the Public Key Cipher
How the Public Key Cipher Works
Source Code for the Public Key Cipher Program
Sample Run of the Public Key Cipher Program
Setting Up the Program
How the Program Determines Whether to Encrypt or Decrypt
Converting Strings to Blocks with getBlocksFromText()
Using getTextFromBlocks() to Decrypt
Writing the encryptMessage() Function
Writing the decryptMessage() Function
Reading in the Public and Private Keys from Their Key Files
Writing the Encryption to a File
Decrypting from a File
Calling the main() Function
Summary
Appendix Debugging Python Code
How the Debugger Works
Debugging the Reverse Cipher Program
Setting Breakpoints
Summary
Index
Resources
i
ii
iii
iv
v
vi
vii
viii
ix
x
xi
xii
xiii
xiv
xv
xvi
xvii
xviii
xix
xx
xxi
xxii
xxiii
xxiv
xxv
xxvi
xxvii
xxviii
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387