So far I've come across Botan and Crypto++ which both provide reversible (e.g AES) and non-reversible (e.g SHA) encryption. I wondered if anyone can recommend either, or something else?
I used to use libtomcrypt for CPP though its written in pure C.
It's huge!, means it has small, robust and simple API implementation of most of the cyphers and hashes down there.
It not on GPL so you can use it in closed projects.
OpenSSL has all the functionality that you would expect and it is often already installed (at least on Linux).
It supports asymmetric/symmetric encryption, digital signatures and hashing algorithms. For example, you can use the high-level OpenSSL EVP API for symmetric encryption.
Google has a very interesting library: KeyCzar.
Of interest:
- Simple API (I have used Crypto++, and it may be powerful... but what a hassle!)
- Keys rotation and versioning (you do intend to make your keys evolve, right ?)
- Safe defaults !!
Frankly, those 3 points are what I think are the most important considerations once you know the implementation is sound. Especially for those of us who are not crypto experts.
Also you can use PoCo library, for more information visit www.pocoproject.org