E2E Encryption Example

by henser

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>

JavaScript

const secretKey = 'test';
/* const data = 'Hey Noah! 👋'; */

const salt = 'gettingsaltyfoo!';
const hash = CryptoJS.SHA256(salt);
const key = CryptoJS.PBKDF2(secretKey, hash, {
  keySize: 256 / 32,
  iterations: 1000
});
console.log("Hash :", hash.toString(CryptoJS.enc.Base64));
console.log("Key :", key.toString(CryptoJS.enc.Base64));

// Generate a random IV
const iv = CryptoJS.lib.WordArray.random(128 / 8);
console.log("IV :", iv.toString(CryptoJS.enc.Base64));


const encrypt = input => {
  // Encrypt message into base64
  const encrypted = CryptoJS.AES.encrypt(input, key, {
    iv
  });
  return encrypted.ciphertext.toString(CryptoJS.enc.Base64);
};

const decrypt = input => {
  try {
    // Decrypt base64 into message again
    const cipherParams = CryptoJS.lib.CipherParams.create({
      ciphertext: CryptoJS.enc.Base64.parse(input)
    });
    return CryptoJS.AES.decrypt(cipherParams, key, {
      iv: iv
    }).toString(CryptoJS.enc.Utf8);
  } catch (e) {
    console.log(e);
  }
};



const encrypted = encrypt('test');
/* const encrypted = 'LfII/4SvgSgPA0PiHRxEukTupN25M9W6TbPXWYp4298='; */
console.log('encrypted:', encrypted);
document.body.innerText += `Encrypted:\n${encrypted}\n\n`;

const decrypted = decrypt(encrypted);
console.log('decrypted:', decrypted);
document.body.innerText += `Decrypted:\n${decrypted}\n\n`;