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 RSA Cipher

**Chapter 24:** Programming the RSA Cipher

Appendix: Debugging Python Code

View the detailed Table of Contents

View the Index