Crypto-js para JavaScript (Node.js): guía completa con ejemplos
En el desarrollo web moderno, la seguridad de los datos es un aspecto crítico. Ya sea para almacenar contraseñas de usuarios, transmitir información confidencial por la red o proteger archivos contra accesos no autorizados, la criptografía es la base de estos procesos. La librería Crypto-js ofrece un conjunto potente y fácil de usar de algoritmos criptográficos para el ecosistema JavaScript, funcionando tanto en el navegador como en el entorno Node.js.
Esta librería implementa una amplia gama de funciones criptográficas estándar: cifrado simétrico (AES, DES, TripleDES), hash (MD5, SHA-1, SHA-256, SHA-512), cálculo de HMAC, así como generación de números aleatorios y manejo de codificaciones (Base64, Hex, UTF-8). Crypto-js no depende de módulos nativos del sistema operativo, lo que la convierte en la opción ideal para aplicaciones isomórficas (código que funciona tanto en el cliente como en el servidor).
En este artículo, analizaremos en detalle la instalación de la librería, los métodos principales con ejemplos de código y un caso práctico real de uso de Crypto-js para proteger datos en una aplicación web. Este material será útil tanto para desarrolladores principiantes como para profesionales experimentados que deseen sistematizar sus conocimientos sobre criptografía en JavaScript.
Instalación
Para instalar Crypto-js en un proyecto Node.js, ejecuta el siguiente comando en la terminal:
npm install crypto-js
Después de la instalación, puedes importar la librería en tu código:
// Para Node.js (CommonJS)
const CryptoJS = require("crypto-js");
// Para ES Modules (si usas "type": "module" en package.json)
import CryptoJS from "crypto-js";
Inicio rápido: ejemplo mínimo funcional
Comencemos con un ejemplo sencillo: cifrado y descifrado de una cadena usando el algoritmo AES:
const CryptoJS = require("crypto-js");
// Mensaje original
const message = "¡Hola, Crypto-js!";
// Clave secreta (debe ser segura en una aplicación real)
const secretKey = "mi-clave-secreta-123";
// Cifrado
const ciphertext = CryptoJS.AES.encrypt(message, secretKey).toString();
console.log("Mensaje cifrado:", ciphertext);
// Descifrado
const bytes = CryptoJS.AES.decrypt(ciphertext, secretKey);
const decryptedMessage = bytes.toString(CryptoJS.enc.Utf8);
console.log("Mensaje descifrado:", decryptedMessage);
Este ejemplo muestra el ciclo básico del cifrado simétrico: transformamos el texto original en una cadena cifrada (Base64) y luego recuperamos el mensaje original usando la misma clave.
Métodos/funciones/clases principales
Veamos las funcionalidades clave de Crypto-js. Para cada método se incluye la firma, una breve descripción y un ejemplo funcional.
1. CryptoJS.AES.encrypt() / CryptoJS.AES.decrypt()
Firma: CryptoJS.AES.encrypt(message, key, [options]) y CryptoJS.AES.decrypt(ciphertext, key, [options])
Qué hace: Implementa el cifrado y descifrado simétrico mediante el algoritmo AES (Advanced Encryption Standard). Soporta los modos ECB, CBC, CFB, OFB, CTR y tamaños de clave de 128/192/256 bits.
const CryptoJS = require("crypto-js");
const message = "Datos secretos";
const key = "claveultrasecreta123";
// Cifrado especificando modo e IV (vector de inicialización)
const iv = CryptoJS.lib.WordArray.random(16); // 16 bytes para AES-128
const encrypted = CryptoJS.AES.encrypt(message, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}).toString();
console.log("Cifrado (CBC):", encrypted);
// Descifrado
const decrypted = CryptoJS.AES.decrypt(encrypted, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}).toString(CryptoJS.enc.Utf8);
console.log("Descifrado:", decrypted); También en la biblioteca
Trabajo con YAML en C# (.NET): biblioteca YamlDotNet
Envío de correo electrónico en Swift (iOS/macOS): MFMailComposeViewController y SMTP
Cliente HTTP para JavaScript (Node.js): top bibliotecas para trabajar con API