Ir al contenido principal

Como encriptar AES con Node JS

 

Puedes descargar el proyecto desde este enlace

El otro día surgió una necesidad para encriptar contenido bajo el algoritmo AES y es la que te vengo a mostrar a continuación en la cual use Node para solventar mi necesidad. Pude haber usando cualquier lenguaje que me viniera en gana pero no quería instalar nada mas.


Dependencias:


Aplicaciones recomendadas:

  • Git bash
  • Visual Studio Code

Lo primero que necesitamos es tener una clave única (KEY) y un vector de inicialización (IV). Este ultimo no es necesario pero agrega un extra de seguridad a nuestro contenido. Para lo cual usaremos el bash de git para utilizar openssl

KEY

openssl rand -base64 24

IV
openssl rand -base64 12

Ahora que ya tenemos estas 2 cadenas únicas. Podemos proceder a escribir nuestro código.

npm init -y

Luego hacemos una modificación en el package.json para que admita módulos

"type": "module",

Instalamos la dependencia de Crypto-JS

npm i crypto-js --save

Ahora importamos los objetos necesarios para interactuar en nuestro archivo por defecto (en mi caso he creado a app.js)

import pkg from 'crypto-js';
const { enc, AES, mode: _mode, pad } = pkg;

Creamos las constantes de KEY e IV y les asignamos los valores que nos dio el bash de Git

const KEY = enc.Utf8.parse('cTY/OJukmaVM4w4UxiUI4cTYq2QGDB8c');
const IV = enc.Utf8.parse('gqeSw9OvjqA3kmGP');
Ahora crearemos las 2 funciones necesarias para trabajar con el encrypt y el decrypt de los datos
function encrypt(data) {
    const encrypted = AES.encrypt(data ? data : '', KEY, {
        iv: IV,
        mode: _mode.CBC,
        padding: pad.Pkcs7
    });
    return encrypted.toString();
}

function decrypt(data) {
    const encrypted = AES.decrypt(data ? data : '', KEY, {
            iv: IV,
            mode: _mode.CBC,
            padding: pad.Pkcs7
        });
    return encrypted.toString(enc.Utf8);
}
Y listo ya esta la base de nuestro aplicativo, ahora ya podemos utilizarlas dentro de un log para probar
console.log(encrypt("Hola Mundo"));
Y similar para el decrypt del contenido
console.log(decrypt("11qK1NkKJpOR0DG6BOjIvA=="));
Espero te haya gustado el ejemplo, su utilidad puede ser tan compleja como te imagines, desde el simple texto mostrado en este ejemplo o como la creación de archivos encriptados

Comentarios