Input Description: A plaintext message \(T\) or encrypted text \(E\), and a key \(k\).
Problem: Encode \(T\) using \(k\) giving \(E\), or decode \(E\) using \(k\) back to \(T\).
Excerpt from The Algorithm Design Manual: Cryptography has grown substantially in importance in recent years, as computer networks have made confidential documents more vulnerable to prying eyes. Cryptography is a way to increase security by making messages difficult to read if they fall into the wrong hands. Although the discipline of cryptography is at least two thousand years old, its algorithmic and mathematical foundations have recently solidified to the point where there can now be talk of provably secure cryptosystems.
The key issue in selecting a cryptosystem is identifying your paranoia level, i.e. deciding how much security you need. Who are you trying to stop from reading your stuff: your grandmother, local thieves, the Mafia, or the NSA? If you can use an accepted implementation of RSA, such as PGP discussed below, you should feel safe against just about anybody.
|bitcoin (rating 10)
||Nettle (rating 10)
|openssl (rating 9)
||Crypto++ (rating 9)
|libsodium (rating 8)
||GnuPG (rating 8)
|OpenSSL (rating 8)
||cryptography (rating 7)
|C++ Boost Library (rating 7)
||Netlib (rating 3)
|Practical Algorithms for Programmers by A. Binstock and J. Rex||Protect your Privacy: a guide for PGP Users by W. Stallings||Applied Cryptography : Protocols, Algorithms, and Source Code in C by Bruce Schneier|
|Differential Cryptanalysis of the Data Encryption Standard by E. Biham and A. Shamir||Compared to What? by G. Rawlins||Introduction to Algorithms by T. Cormen and C. Leiserson and R. Rivest and C. Stein|
|Cryptography and Data Security by D. Denning||The Code breakers: the story of secret writing by D. Kahn|