Criptografía en TypeScript: cifrado y hash

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Criptografía en TypeScript: cifrado y hash de datos



En el desarrollo web moderno, la seguridad de los datos es un aspecto crítico. TypeScript, como superestructura fuertemente tipada sobre JavaScript, proporciona potentes herramientas para implementar operaciones criptográficas. En este artículo, exploraremos los principales algoritmos de cifrado y hash disponibles en TypeScript y mostraremos cómo aplicarlos en la práctica.



Módulo incorporado crypto y bibliotecas



Node.js proporciona el módulo incorporado crypto, que es totalmente compatible con TypeScript. Para aplicaciones de navegador se utiliza Web Crypto API. Para tareas más complejas, se recomienda la biblioteca crypto-js, que funciona tanto en Node.js como en el navegador.



Instalación de los paquetes necesarios:



npm install crypto-jsnpm install @types/crypto-js --save-dev


Cifrado simétrico AES



El algoritmo AES (Advanced Encryption Standard) es el cifrado simétrico más popular. Utiliza la misma clave para cifrar y descifrar datos.



Ejemplo de implementación de AES-256 en TypeScript:



import CryptoJS from 'crypto-js';

const SECRET_KEY = 'mi-clave-fuerte-de-32-caracteres';

function encryptAES(text: string): string { const encrypted = CryptoJS.AES.encrypt(text, SECRET_KEY); return encrypted.toString();}

function decryptAES(ciphertext: string): string { const decrypted = CryptoJS.AES.decrypt(ciphertext, SECRET_KEY); return decrypted.toString(CryptoJS.enc.Utf8);}

// Usoconst originalText = 'Datos secretos para proteger';const encrypted = encryptAES(originalText);console.log('Cifrado:', encrypted);

const decrypted = decryptAES(encrypted);console.log('Descifrado:', decrypted);


Cifrado asimétrico RSA



RSA utiliza un par de claves: pública (public) y privada (private). La clave pública cifra los datos y la privada los descifra. Es ideal para la transmisión segura de datos.



Ejemplo usando Node.js crypto:



import * as crypto from 'crypto';

function generateRSAKeys(): { publicKey: string; privateKey: string } { const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', { modulusLength: 2048, publicKeyEncoding: { type: 'spki', format: 'pem' }, privateKeyEncoding: { type: 'pkcs8', format: 'pem' } }); return { publicKey, privateKey };}

function encryptRSA(plainText: string, publicKey: string): string { const buffer = Buffer.from(plainText, 'utf-8'); const encrypted = crypto.publicEncrypt(publicKey, buffer); return encrypted.toString('base64');}

function decryptRSA(cipherText: string, privateKey: string): string { const buffer = Buffer.from(cipherText, 'base64'); const decrypted = crypto.privateDecrypt(privateKey, buffer); return decrypted.toString('utf-8');}

// Ejemplo de usoconst keys = generateRSAKeys();const message = 'Mensaje confidencial';const encryptedRSA = encryptRSA(message, keys.publicKey);const decryptedRSA = decryptRSA(encryptedRSA, keys.privateKey);

console.log('Original:', message);console.log('Descifrado:', decryptedRSA);


Hash de datos



El hash es una transformación unidireccional de datos en una cadena de longitud fija. A diferencia del cifrado, el hash no se puede revertir. Principales usos:



  • Almacenamiento de contraseñas — en lugar de la contraseña se almacena su hash
  • Verificación de integridad de datos — comparación de hashes de archivos
  • Firmas digitales — confirmación de autoría


SHA-256



El algoritmo más común de la familia SHA-2:



import CryptoJS from 'crypto-js';

function hashSHA256(data: string): string { return CryptoJS.SHA256(data).toString();}

Recommendations