Skip to content

Instantly share code, notes, and snippets.

@nardhar
Forked from vlucas/encryption.ts
Created December 22, 2017 19:36
Show Gist options
  • Select an option

  • Save nardhar/110822d7b529fcb3e62344e98fa12a62 to your computer and use it in GitHub Desktop.

Select an option

Save nardhar/110822d7b529fcb3e62344e98fa12a62 to your computer and use it in GitHub Desktop.

Revisions

  1. @vlucas vlucas created this gist Jan 26, 2017.
    30 changes: 30 additions & 0 deletions encryption.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,30 @@
    'use strict';

    const crypto = require('crypto');

    const ENCRYPTION_KEY = process.env.ENCRYPTION_KEY; // Must be 256 bytes (32 characters)
    const IV_LENGTH = 16; // For AES, this is always 16

    function encrypt(text) {
    let iv = crypto.randomBytes(IV_LENGTH);
    let cipher = crypto.createCipheriv('aes-256-cbc', new Buffer(ENCRYPTION_KEY), iv);
    let encrypted = cipher.update(text);

    encrypted = Buffer.concat([encrypted, cipher.final()]);

    return iv.toString('hex') + ':' + encrypted.toString('hex');
    }

    function decrypt(text) {
    let textParts = text.split(':');
    let iv = new Buffer(textParts.shift(), 'hex');
    let encryptedText = new Buffer(textParts.join(':'), 'hex');
    let decipher = crypto.createDecipheriv('aes-256-cbc', new Buffer(ENCRYPTION_KEY), iv);
    let decrypted = decipher.update(encryptedText);

    decrypted = Buffer.concat([decrypted, decipher.final()]);

    return decrypted.toString();
    }

    module.exports = { decrypt, encrypt };