In Cracking Codes with Python, you'll learn how to program in Python while making and breaking ciphers, which are used to encrypt secret messages. (No programming experience required!).
After a quick crash course in programming, you'll make, test, and hack classic cipher programs. You'll begin with simple programs like the Caesar cipher and then work your way up to public key cryptography and the RSA cipher, which is used for modern secure data transmissions.
Each program comes with the full code and a line-by-line explanation of how things work. By book's end, you'll walk away with a solid foundation in Python and same crafty programs under your belt.
Learn how to:
-Combine loops, variables, and flow control statements into real working programs
-Use dictionary files to instantly detect whether text is English or nonsense
-Create programs to test that the code you've written is working correctly
-Write your own programming modules that you can import and use in other programs
-Debug your programs and find common errors
Cracking Codes with Python is a chance to pick up some Python skills while getting a peek into the intriguing world of cryptography--what more could an aspiring hacker want?
Author(s): Al Sweigart
Publisher: No Starch Press
Year: 2018
Language: English
Pages: 416
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