crypto/crypto/ CryptoJS
See here
Example
You can choose only what you need.
<script src="aes.js"></script>
<script src="sha512.js"></script>
<script src="pbkdf2.js"></script>
...
const enc = (passphrase,plaintext,iterations=2048) => {
const salt = CryptoJS.lib.WordArray.random(256)
const iv = CryptoJS.lib.WordArray.random(16)
const key = CryptoJS.PBKDF2(passphrase, salt, { hasher: CryptoJS.algo.SHA512, keySize: 64/8, iterations})
const encrypted = CryptoJS.AES.encrypt(plaintext, key, { iv })
const ciphertext = encrypted.toString()
const obj = { ciphertext, salt: salt.toString(CryptoJS.enc.Hex),
iv: iv.toString(CryptoJS.enc.Hex), iterations }
return obj
}
const decrypt = (passphrase,obj) => {
const { ciphertext, iterations } = obj
const salt = CryptoJS.enc.Hex.parse(obj.salt)
const iv = CryptoJS.enc.Hex.parse(obj.iv)
const key = CryptoJS.PBKDF2(passphrase, salt, { hasher: CryptoJS.algo.SHA512, keySize: 64/8, iterations})
const decrypted = CryptoJS.AES.decrypt(ciphertext, key, { iv })
return decrypted.toString(CryptoJS.enc.Utf8)
}