crypto
O módulo node:crypto fornece APIs de hashing, HMAC, bytes aleatórios e cifras para tokens, verificação de webhook e criptografia - use as APIs integradas antes de adicionar wrappers de criptografia npm.
Busque em todas as páginas da documentação
O módulo node:crypto fornece APIs de hashing, HMAC, bytes aleatórios e cifras para tokens, verificação de webhook e criptografia - use as APIs integradas antes de adicionar wrappers de criptografia npm.
import { createHmac, randomBytes, timingSafeEqual, randomUUID } from 'node:crypto';
const token = randomBytes(32).toString('base64url');
const id = randomUUID();
const sig = createHmac('sha256', secret).update(body).digest('hex');Quando usar:
scrypt/argon2 via crypto ou biblioteca dedicada)import { createHmac, randomBytes, scrypt, timingSafeEqual } from 'node:crypto';
import { promisify } from 'node:util';
const scryptAsync = promisify(scrypt);
export function signPayload(body: Buffer, secret: string): string {
return createHmac('sha256', secret).update(body).digest('hex');
}
export function verifySignature(body: Buffer, secret: string, providedHex: string): boolean {
const expected = Buffer.from(signPayload(body, secret), 'hex');
const provided = Buffer.from(providedHex, 'hex');
if (expected.length !== provided.length) return false;
return timingSafeEqual(expected, provided);
}
export async function hashPassword(password: string, salt?: Buffer): Promise<{ salt: Buffer; hash: Buffer }> {
const s = salt ?? randomBytes(16);
const hash = (await scryptAsync(password, s, 64)) as Buffer;
return { salt: s, hash };
}import { webcrypto } from 'node:crypto';
const key = await webcrypto.subtle.generateKey(
{ name: 'AES-GCM', length: 256 },
true,
['encrypt', 'decrypt'],
);O que isso demonstra:
timingSafeEqual nos digestsscrypt via promisify para armazenamento de senhas com salt por usuáriosubtle para AES-GCM ao interoperar com criptografia do navegadorrandomBytes, randomUUID para tokens.| Tarefa | API |
|---|---|
| Token de sessão | randomBytes |
| Verificação de webhook | HMAC + timingSafeEqual |
| Armazenamento de senha | scrypt/argon2 |
| Criptografia AES | createCipheriv ou subtle |
import { createHash } from 'node:crypto';
export function sha256Hex(input: string): string {
return createHash('sha256').update(input, 'utf8').digest('hex');
}=== - vazamento. Correção: compare digests HMAC com timingSafeEqual.randomBytes.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| bcrypt npm | Padrão bcrypt da equipe | scrypt é nativo o suficiente |
| Criptografia de envelope KMS | Chaves mestras na nuvem | Tokens de desenvolvimento local |
| Biblioteca JWT | Claims assinados com exp | HMAC bruto é suficiente para webhooks |
| TLS apenas | Dados em trânsito | Necessidade de criptografia de campo em repouso |
UUID v4 para identificadores; randomBytes para segredos de comprimento personalizado.
Codificação segura para URL sem +/ - toString('base64url') em Buffer.
Ambos em crypto - scrypt é intensivo em memória; escolha com base em revisão de segurança e ajuste de parâmetros.
O servidor HTTPS do Node usa o módulo tls - certificados da plataforma ou cert-manager.
Use stream com createCipheriv para cargas úteis grandes - subtle para pedaços/chaves menores.
Suporte a dois segredos durante a janela de rotação - verifique contra ambos.
Geralmente OK - evite compartilhar chaves entre threads sem propriedade clara.
Builds especiais do Node - consulte a segurança da organização - não é imagem genérica padrão.
Pseudonimize com hash salgado para logs - identificação não reversível.
Segurança de Buffer - padrões de limpeza e comparação.
Veja Verificação de Webhook - padrão HMAC.
Use createCipheriv com IV explícito - APIs legadas inseguras.
Versões do Stack: Esta página foi escrita para Node.js 24.18.0 (Active LTS), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 e NestJS 11.
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026