criptografia-en-nodejs

Funciones criptográficas en Node.js con Crypto

El módulo crypto de Node.js proporciona una gran cantiddad de funciones para trabajar con criptografía, desde la generación de hashes hasta el cifrado y descifrado de datos.

Funciones del módulo Crypto

Generar un Hash de una cadena

Para generar un hash de una cadena, puedes utilizar el módulo crypto junto con el algoritmo de hash deseado, como SHA-256. Aquí tienes un ejemplo de cómo hacerlo:

import { createHash } from 'node:crypto';

const cadena = 'Mensaje a hash';

const hash = createHash('sha256');
hash.update(cadena);

const hashResultado = hash.digest('hex');
console.log('Hash SHA-256:', hashResultado);

Generar un Hash de una contraseña con Sal

Cuando se trata de almacenar contraseñas de forma segura, es importante utilizar técnicas como el hashing de contraseñas con sal (salt).

Bcrypt es una biblioteca popular que facilita este proceso. Veamos cómo generar y comparar hashes de contraseñas con Bcrypt:

import { hashSync, compareSync, genSaltSync } from 'bcrypt';

const password = 'contraseña123';

// Generar hash con sal
const saltRounds = 10;
const salt = genSaltSync(saltRounds);
const hash = hashSync(password, salt);

console.log('Hash de la contraseña:', hash);

// Comparar hash con contraseña ingresada
const contraseñaCorrecta = 'contraseña123';
const resultadoComparacion = compareSync(contraseñaCorrecta, hash);
console.log('Las contraseñas coinciden:', resultadoComparacion);

Generar un par de claves RSA

El algoritmo de cifrado RSA es ampliamente utilizado para la encriptación asimétrica. Podemos generar un par de claves RSA con el módulo crypto de la siguiente manera:

import { generateKeyPairSync } from 'node:crypto';

const { publicKey, privateKey } = generateKeyPairSync('rsa', {
  modulusLength: 2048,
  publicKeyEncoding: {
    type: 'spki',
    format: 'pem'
  },
  privateKeyEncoding: {
    type: 'pkcs8',
    format: 'pem'
  }
});

console.log('Clave Pública RSA:', publicKey);
console.log('Clave Privada RSA:', privateKey);

Cifrar y descifrar datos utilizando RSA

Con las claves RSA generadas, podemos cifrar y descifrar datos de manera segura. Aquí tenéis un ejemplo de cómo hacerlo:

import { publicEncrypt, privateDecrypt } from 'node:crypto';

const mensaje = 'Mensaje a cifrar';

// Cifrar con clave pública
const mensajeCifrado = publicEncrypt(publicKey, Buffer.from(mensaje, 'utf8'));
console.log('Mensaje cifrado:', mensajeCifrado.toString('base64'));

// Descifrar con clave privada
const mensajeDescifrado = privateDecrypt(privateKey, mensajeCifrado);
console.log('Mensaje descifrado:', mensajeDescifrado.toString('utf8'));

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github github-full