- The Man Who Mistook His Wife for a Hat ~ Oliver Sacks, 1985. This book contains tales of some of the Sacks's patients. A very interesting read. [1]
- The Mind's Eye ~ Oliver Sacks, 2010. [2]
- Spy Catcher (Autobiography of a MI5 agent) ~ Peter Wright, 1987. [3]
- Applied Cryptography ~ Bruce Schneier, 1994. Approachable and succinate language of this book makes it easier to understand. [4]
[1] http://www.amazon.in/Man-Who-Mistook-his-Wife/dp/0330523627
[2] http://www.amazon.in/Minds-Eye-Oliver-Sacks/dp/0330508903/
[3] https://www.amazon.com/Spy-Catcher-Autobiography-Intelligenc...
[4] http://www.amazon.in/Applied-Cryptography-Protocols-Algorith...
The first third (half?) of the book is devoted to explaining (not with code) the various complex interactions between parties who need to trust one another -- lots of stuff on key exchange, and then only later on the different types of ciphers (block vs stream ciphers). The examples are clear and well-written, and VERY memorable. Bruce explains very well what the pitfalls are in each scenario, and all the ways in which malicious attackers can try to break your trust.
The second half of the book is implementation of most of the algorithms in C.
Other books may cover the topic be better, but I haven't read them. (Sorry.) I like that Applied Cryptography gives a good noob-friendly introduction, and builds from there, yet also has depth and source code.
1: http://www.amazon.com/Applied-Cryptography-Protocols-Algorit...
First off, it's helpful to know that the integers (denoted {Z}) are the canonical example of what's called ring structure, which basically means + and * work normally, but you aren't guaranteed clean division. Since they're simple, mathematicians sometimes use {Z} as a stand-in for more persnickety structures in the same way they use n-dimensional Euclidean space as a proxy for thinking about infinite-dimensional vector spaces. Articles like this one usually get written when an algebraist or number theorist publishes an epic proof, and the only way to make it comprehensible to a lay audience is to project it down into toy examples in a simple space. That's kind of a "trust me" answer by itself, of course. So without further ado, the math:
There are two notable things about rings. You can make polynomials with + and * in them, and division generally leaves you with remainders. Remainders are okay, though, because they let you define new rings. {Z mod 12 Z}, for example, is shorthand for "integers mod 12," or more formally, "map the integers to a new space where all the multiples of 12 get sent to zero," so {1, 2, ..., 11 } act normal, 12 is actually zero, 13=12+1=0+1=1 and so on.
It turns out that this is all you need to represent numbers in place-value notation. A number N in base r has a representation of n digits:
N = (A_n)(r^n) + ... + (A_2)(r^2) + (A_1)r + A_0
which is just a polynomial whose coefficients are members of the ring {Z mod r*Z}. If you map that back to the integers, plug in the actual value of r, and crunch the numbers, you get your original value of N back.
So, "rearranging the digits of an integer" is actually "permuting the coefficients of polynomials with coefficients mod r."
Now, suppose you have an email message that's 12000 characters long. You can think of that message as the polynomial representation, modulo 256, of a really big number. Mapping that number into different modular spaces, or permuting the coefficients of its various representations so that you can get it back later ("encrypting the message") forms the basis of the field of cryptography, which in turn is closely related to information theory and the theory of ergodic processes, etc, etc, etc.
For more details, you might start with:
http://www.amazon.com/Applied-Cryptography-Protocols-Algorit...