Cryptography is a method of secure communication between two or more parties. The crucial step is exchanging a key in a secure manner. There are, however, two problems with conventional cryptography. First the sender and the receiver should exchange the key through highly reliable and secure channels. The second problem is that a clever eavesdropper can, by a careful analysis of the sent information, reconstruct the key. In this chapter, schemes to overcome these problems are presented. First a scheme for exchanging a key over public channels, the so-called RSA algorithm, is discussed. Then the protocols for the quantum key distribution (QKD), the BennettBrassard-84 (BB-84) and Bennett-92(B-92) protocols, are then presented. The QKD protocols are exclusively derived using Bohrs principle of complementarity. An application of these ideas to the design of secure quantum money is discussed.