I arrived at the following code and would like to know if this is a correct and secure way to generate an AES-CBC-192 cipher with CryptoJS:
Original Question Code:
let encrypt = (text,key) => {
let salt = "M@Tr05K@";
let iv = CryptoJS.lib.WordArray.random(16);
let key_to_bits = CryptoJS.PBKDF2(key,salt,{keySize: 192/8, iterations:30000});
return CryptoJS.AES.encrypt(text,key,{iv:iv}).toString();
}
encrypt("Lorem ipsum...","¿MinhaSenha?>Segur@?");
Code with suggested changes:
let encrypt = (text, key) => {
let salt = CryptoJS.lib.WordArray.random(16);
let iv = CryptoJS.lib.WordArray.random(16);
let key_to_bits = CryptoJS.PBKDF2(key, salt, {
keySize: 192 / 32,
iterations: 30000
});
return {result : CryptoJS.AES.encrypt(text, key_to_bits, {
iv: iv
}).toString(),
salt:CryptoJS.enc.Hex.stringify(salt),
iv:CryptoJS.enc.Hex.stringify(iv)
};
}
encrypt("Lorem ipsum...", "¿MinhaSenha?>Segur@?");
Thanks for listening :)