Encrypt and Decrypt in NodeJS

How to encrypt text

Create a file named encdec.js and paste:

js
const crypto = require("crypto") const encrypt = (plainText, password) => { try { const iv = crypto.randomBytes(16); const key = crypto.createHash('sha256').update(password).digest('base64').substr(0, 32); const cipher = crypto.createCipheriv('aes-256-cbc', key, iv); let encrypted = cipher.update(plainText); encrypted = Buffer.concat([encrypted, cipher.final()]) return iv.toString('hex') + ':' + encrypted.toString('hex'); } catch (error) { console.log(error); } }

Let's test it:

Append these lines:

js
const encrypt = (plainText, password) => { ... } const text = "Hello World" const pass = "secret1234" const encText = encrypt(text, pass) console.log('encrypted text', encText);

Then run:

sh
node encdec.js # Output: encrypted text af9efafd353a5a7e27f31262dac12d6b:eb1dd75ea6c84e25300d5a244138ab3c

How to decrypt the encrypted text

Add the decryption function:

js
const decrypt = (encryptedText, password) => { try { const textParts = encryptedText.split(':'); const iv = Buffer.from(textParts.shift(), 'hex'); const encryptedData = Buffer.from(textParts.join(':'), 'hex'); const key = crypto.createHash('sha256').update(password).digest('base64').substr(0, 32); const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv); const decrypted = decipher.update(encryptedData); const decryptedText = Buffer.concat([decrypted, decipher.final()]); return decryptedText.toString(); } catch (error) { console.log(error) } }

And a test:

js
const text = "Hello World" const pass = "secret1234" const encText = encrypt(text, pass) console.log('encrypted text', encText); const decText = decrypt(encText, pass) console.log('decrypted text', decText);

Then run :

sh
node encdec.js # Output encrypted text 71596b9f5a99532f438fc5669b845680:248f6cb24a4ebeb174bbb73953115fd5 decrypted text Hello World

Source: https://gist.github.com/vlucas/2bd40f62d20c1d49237a109d491974eb