Number Theory and Cryptography