Encrypt and decrypt text using PBKDF2 and AES
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.2.0/crypto-js.min.js"></script>
JavaScript
const keySize = 256
const iterations = 10000
const encrypt = (msg, pass) => {
const salt = CryptoJS.lib.WordArray.random(128 / 8);
const key = CryptoJS.PBKDF2(pass, salt, {
keySize: keySize / 32,
iterations: iterations,
});
const iv = CryptoJS.lib.WordArray.random(128 / 8);
const encrypted = CryptoJS.AES.encrypt(msg, key, {
iv: iv,
padding: CryptoJS.pad.Pkcs7,
mode: CryptoJS.mode.CBC,
});
return salt.toString() + iv.toString() + encrypted.toString();
};
const decrypt = (transitmessage, pass) => {
const salt = CryptoJS.enc.Hex.parse(transitmessage.substr(0, 32));
const iv = CryptoJS.enc.Hex.parse(transitmessage.substr(32, 32));
const encrypted = transitmessage.substring(64);
const key = CryptoJS.PBKDF2(pass, salt, {
keySize: keySize / 32,
iterations: iterations,
});
return CryptoJS.AES.decrypt(encrypted, key, {
iv: iv,
padding: CryptoJS.pad.Pkcs7,
mode: CryptoJS.mode.CBC,
}).toString(CryptoJS.enc.Utf8);
};
for (var i = 0; i < 100; i++) {
var msg = CryptoJS.lib.WordArray.random(256 / 8).toString();
var password = CryptoJS.lib.WordArray.random(20).toString();
var ct = encrypt(msg, password)
var dt = decrypt(ct, password)
if (dt !== msg) {
console.log(msg)
console.log(ct)
console.log(dt)
}
}
console.log('Done')