I have been interested in cryptography for a very long time, even before computer science. Back in 1980, I was offered a book called « La guerre des codes secrets », a French translation of David Kahn’s The Codebreakers and I just devoured it countless times (that was way before I discovered that it was really a butchered translation, missing more than 3/4 of the technical descriptions and schemas). Of course, when Kahn did a revised edition of his book in 1996, I bought it.
This book is really more about history through the cryptographic lens but also describe many of the old paper-and-pencil kind of system so it is a very useful reference with a lot of pictures and tables (and some pictures, also missing from the translated one).
One recent book I read is about Elizebeth Smith Friedman who was not only William F. Friedman’s wife but foremost a cryptanalyst of great skills, on par with her husband. Very interesting read.
For modern cryptography (mostly based on maths), Bruce Schneier’s book Applied Cryptography is the best reference book available (although it is showing its age now, missing some of the recent ciphers). It does not cover all the new systems that have appeared since of course but most principles are described in the book. Some of them are old like the venerable DES or very recent like the new NIST standard, AES.
I’m not covering what used to be called “codes” before computer science as they are just a variation on monoalphabetic ciphers, just using phrases and sentences instead of individual letters (« nomenclateur » in French). Some of them can be more complicated (like using a two-part numbering scheme – think of the commercial code behind the Dreyfus case) but basically, there are less fun to implement :)
One interesting point though: I learned recently through an nice article from Steven Bellovin that the One-time pad was probably invented some years before previously thought as a superencipherment system to his code by Frank Miller.
Here is the list of ciphers implemented here:
- simple substitution-based (Caesar, Rot13)
- bigrammatic ciphers (Polybius, Playfair)
- transposition cipher
- polyalphabetic ciphers (Vigenere)
- more complex systems (Chaocipher, Wheatstone device)
- superencipherement systems (ADFGVX, VIC cipher)