Gerando Hashes Criptográficos e UUIDs v4 Nativamente no Node.js
Gerar identificadores únicos e calcular hashes de segurança são tarefas essenciais na autenticação, verificação de integridade de arquivos e criação de chaves primárias. Utilizando o módulo nativo node:crypto, você realiza essas operações criptográficas sem a necessidade de instalar dependências externas como uuid ou bcrypt.
JavaScript
import { createHash, randomUUID } from 'node:crypto';
/**
* Gera um hash criptográfico a partir de um texto informado
* @param {string} texto - Conteúdo a ser convertido em hash
* @param {string} algoritmo - Algoritmo criptográfico ('sha256', 'md5', etc.)
* @returns {string} Hash gerado em formato hexadecimal
*/
function gerarHash(texto, algoritmo = 'sha256') {
return createHash(algoritmo)
.update(texto) // Adiciona os dados para o hash
.digest('hex'); // Finaliza o processo e retorna em hexadecimal
}
// 1. Exemplo de geração de UUID v4 (Identificador Único Universal)
const idUnico = randomUUID();
console.log('UUID v4 Gerado:', idUnico);
// 2. Exemplo de geração de Hash SHA-256 (Recomendado para integridade/chaves)
const senhaTextoPuro = 'MinhaSenhaSegura123';
const hashSHA256 = gerarHash(senhaTextoPuro, 'sha256');
console.log('Hash SHA-256:', hashSHA256);
// 3. Exemplo de geração de Hash MD5 (Legado/Checksum de arquivos baixos)
const hashMD5 = gerarHash('ConteudoParaCheckSum', 'md5');
console.log('Hash MD5:', hashMD5);
Pontos-chave
- Desempenho Nativo: O módulo
node:cryptoé construído sobre a biblioteca OpenSSL, garantindo alta performance e segurança sem adicionar vulnerabilidades de pacotes de terceiros. randomUUID()Altamente Seguro: A funçãorandomUUID()gera UUIDs versão 4 criptograficamente seguros utilizando o gerador de números pseudoaleatórios do sistema operacional.- Incompatibilidade do MD5 para Senhas: O algoritmo MD5 é vulnerável a ataques de colisão e não deve ser utilizado para armazenar senhas; prefira SHA-256/SHA-512 ou algoritmos com salt apropriados (como
scryptoupbkdf2, disponíveis no próprio módulocrypto). - Codificação de Saída (
digest): O método.digest()aceita formatos como'hex','base64'ou'binary'. O formato'hex'é o mais comum para exibição e armazenamento em banco de dados.
