Forge Javascript Crypto Library:
Example:
<script type="text/javascript" src="js/debug.js"></script>
<script type="text/javascript" src="js/util.js"></script>
<script type="text/javascript" src="js/md5.js"></script>
<script type="text/javascript" src="js/sha1.js"></script>
<script type="text/javascript" src="js/sha256.js"></script>
<script type="text/javascript" src="js/prng.js"></script>
<script type="text/javascript" src="js/random.js"></script>
<script type="text/javascript" src="js/aes.js"></script>
<script type="text/javascript" src="js/hmac.js"></script>
<script type="text/javascript" src="js/pbkdf2.js"></script>
<script type="text/javascript">
var keySizeInBits = 128; // this must be 128, 192 or 256 bit
var keySize = 16; // this must be 16, 24, or 32 byte
/*** create key from a passphrase */
var salt = forge.random.getBytes(8);
var key = forge.pkcs5.pbkdf2("Secret Passphrase", salt, 1000, keyLen);
var iv = forge.random.getBytes(16); // IV
/*** encrypt */
var input = forge.util.createBuffer("plaintext");
var cipher = forge.aes.startEncrypting(key, iv);
cipher.update(input);
var status = cipher.finish();
var ciphertext = cipher.output.data;
/*** decrypt */
var ptext = forge.aes.startDecrypting(key, iv);
var new_buffer = forge.util.createBuffer(ciphertext);
ptext.update(new_buffer);
var status = ptext.finish();
var plaintext = ptext.output.data;
</script>
The modes of operation currently available are:
And the padding schemes currently available are: