One possible path into cryptography is through implementation. Take some standard function or set of functions, e.g. the SHA family of hash functions. From the standard, produce your own code; the standard includes some test vectors that will help you verify that your implementation is correct. Then compare your code with existing libraries, e.g. OpenSSL, Crypto++ and sphlib; benchmark your code and see what you could do to make your code run faster and/or smoother. Though obtaining a fast hash function implementation is not extremely useful by itself (since fast implementations are already freely available), the exercise will grant you precise and deep knowledge of how these functions work, and that will be a strong asset to understand research papers about them.
Hash functions are a nice starting point since they tend to be accurately specified, and they use no key. Once you have mastered a few hash function, try HMAC. Then proceed to symmetric encryption (especially RC4, DES and 3DES, and AES). At that point you will have some notions of the internal working of some symmetric cipher, and, maybe more importantly, you will know how to read and understand algorithm specifications.
Further steps will be to dabble in asymmetric crypto, basically RSA. Asymmetric cryptography requires some mathematics; you may want to have a look at the Handbook of Applied Cryptography, which is freely available and is a good reference book (this book has no relation whatsoever with the "Applied Cryptography" from Bruce Schneier -- the latter is an oft-cited introduction book, but much less useful as a reference). If you want to implement your own RSA, using a programming language or library that provides big-integer arithmetics will make things simpler (e.g. Java with java.math.BigInteger
, C#/.NET 4.0 with System.Numerics.BigInteger
, or some external library like GMP). Alternatively, go ahead and write your own big integer code (there again, a healthy exercise); for that, you will want to read chapter 14 of the Handbook.
Once you have done hash functions, HMAC, symmetric encryption and RSA, you can proceed to write your own SSL/TLS library, beginning with TLS 1.0. Writing a TLS client that can connect to and interoperate with existing TLS server will given you intimate knowledge of the SSL/TLS handshake, and you will be able to understand all the research about known attacks on SSL and how they are fixed (e.g. BEAST, Poodle,...). Use this answer as a reading guide about TLS.
Implementation is not the only way to learn cryptography, but it works.