Crypto-js para JavaScript (Node.js): guia completo com exemplos
No desenvolvimento web moderno, a segurança dos dados é um aspecto crítico. Seja para armazenar senhas de usuários, transmitir informações confidenciais pela rede ou proteger arquivos contra acesso não autorizado — a criptografia está na base desses processos. A biblioteca Crypto-js oferece um conjunto poderoso e prático de algoritmos criptográficos para o ecossistema JavaScript, funcionando tanto no navegador quanto no ambiente Node.js.
Esta biblioteca implementa uma ampla gama de funções criptográficas padrão: criptografia simétrica (AES, DES, TripleDES), hash (MD5, SHA-1, SHA-256, SHA-512), cálculo de HMAC, além de geração de números aleatórios e manipulação de codificações (Base64, Hex, UTF-8). O Crypto-js não depende de módulos nativos do sistema operacional, tornando-o a escolha ideal para aplicações isomórficas (código que roda tanto no cliente quanto no servidor).
Neste artigo, vamos detalhar a instalação da biblioteca, os principais métodos com exemplos de código e também analisar um exemplo prático real de uso do Crypto-js para proteger dados em uma aplicação web. O conteúdo será útil tanto para desenvolvedores iniciantes quanto para profissionais experientes que desejam organizar seus conhecimentos sobre criptografia em JavaScript.
Instalação
Para instalar o Crypto-js em um projeto Node.js, execute o seguinte comando no terminal:
npm install crypto-js
Após a instalação, você pode importar a biblioteca no seu código:
// Para Node.js (CommonJS)
const CryptoJS = require("crypto-js");
// Para ES Modules (se usar "type": "module" no package.json)
import CryptoJS from "crypto-js";
Início rápido: exemplo mínimo funcional
Vamos começar com um exemplo simples — criptografar e descriptografar uma string usando o algoritmo AES:
const CryptoJS = require("crypto-js");
// Mensagem original
const message = "Olá, Crypto-js!";
// Chave secreta (deve ser segura em uma aplicação real)
const secretKey = "minha-chave-secreta-123";
// Criptografia
const ciphertext = CryptoJS.AES.encrypt(message, secretKey).toString();
console.log("Mensagem criptografada:", ciphertext);
// Descriptografia
const bytes = CryptoJS.AES.decrypt(ciphertext, secretKey);
const decryptedMessage = bytes.toString(CryptoJS.enc.Utf8);
console.log("Mensagem descriptografada:", decryptedMessage);
Este exemplo demonstra o ciclo básico da criptografia simétrica: transformamos o texto original em uma string criptografada (Base64) e depois recuperamos a mensagem original usando a mesma chave.
Principais métodos/funções/classes
Vamos explorar os recursos essenciais do Crypto-js. Para cada método, apresentamos a assinatura, uma breve descrição e um exemplo funcional.
1. CryptoJS.AES.encrypt() / CryptoJS.AES.decrypt()
Assinatura: CryptoJS.AES.encrypt(message, key, [options]) e CryptoJS.AES.decrypt(ciphertext, key, [options])
O que faz: Implementa criptografia e descriptografia simétrica usando o algoritmo AES (Advanced Encryption Standard). Suporta os modos ECB, CBC, CFB, OFB, CTR e tamanhos de chave de 128/192/256 bits.
const CryptoJS = require("crypto-js");
const message = "Dados secretos";
const key = "chavesupersecreta123";
// Criptografia especificando modo e IV (vetor de inicialização)
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("Criptografado (CBC):", encrypted);
// Descriptografia
const decrypted = CryptoJS.AES.decrypt(encrypted, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}).toString(CryptoJS.enc.Utf8);
console.log("Descriptografado:", decrypted); Também na biblioteca
Autorização e Autenticação em Kotlin: JWT, Spring Security e Ktor
Trabalho com Excel em PHP: bibliotecas PhpSpreadsheet, PhpOffice e geração de XLSX
Cliente OAuth para Node.js: implementação de autorização via Google e GitHub
Trabalhando com Kafka em Rust: bibliotecas e exemplos para iniciantes
Migrações de banco de dados em C++: visão geral de ferramentas e bibliotecas