Cryptography : Theory and Practice