Criptografia em TypeScript: criptografia e hash
O desenvolvimento web moderno é impensável sem garantir a segurança dos dados. TypeScript, como uma extensão estritamente tipada sobre JavaScript, fornece aos desenvolvedores ferramentas poderosas para implementar algoritmos criptográficos. Neste artigo, exploraremos os principais métodos de criptografia e hash disponíveis no ecossistema TypeScript e mostraremos como aplicá-los na prática.
Por que a criptografia é importante em TypeScript?
TypeScript é amplamente utilizado tanto para frontend quanto para backend (via Node.js). Em ambos os casos, surge a necessidade de proteger dados confidenciais: senhas de usuários, tokens de autenticação, conteúdo de mensagens. Sem a devida proteção criptográfica, os dados podem ser interceptados ou comprometidos.
A criptografia em TypeScript resolve três tarefas principais:
- Confidencialidade — criptografar dados para que não possam ser lidos por terceiros.
- Integridade — garantia de que os dados não foram alterados durante a transmissão.
- Autenticação — verificação da autenticidade da fonte dos dados.
Principais bibliotecas criptográficas para TypeScript
Em TypeScript, você pode usar tanto as APIs integradas do navegador quanto bibliotecas de terceiros. Vamos considerar as opções mais populares:
1. Web Crypto API (integrada ao navegador)
API padrão disponível em navegadores modernos e Node.js (a partir da versão 15). Não requer instalação de pacotes adicionais. Suporta AES, RSA, SHA e muito mais.
2. crypto (biblioteca Node.js)
Módulo integrado do Node.js que fornece um amplo conjunto de funções criptográficas. Para TypeScript, é necessário instalar os tipos: npm install @types/node.
3. bcrypt / bcryptjs
Biblioteca especializada para hash de senhas. Recomendada para armazenar senhas de usuários devido à proteção integrada com salt.
4. tweetnacl / nacl
Biblioteca para criptografia de chave pública (NaCl). Destaca-se pelo alto desempenho e facilidade de uso.
Criptografia de dados em TypeScript
Vamos considerar dois tipos principais de criptografia: simétrica (uma chave) e assimétrica (par de chaves).
Criptografia simétrica com AES-GCM
AES (Advanced Encryption Standard) no modo GCM fornece tanto criptografia quanto verificação de integridade dos dados. Exemplo de implementação em TypeScript usando Web Crypto API:
// Função de criptografia AES-GCMasync function encryptAESGCM( plaintext: string, password: string): Promise<{ iv: Uint8Array; ciphertext: Uint8Array }> { const encoder = new TextEncoder(); const keyMaterial = await crypto.subtle.importKey( 'raw', encoder.encode(password), 'PBKDF2', false, ['deriveBits', 'deriveKey'] );
const key = await crypto.subtle.deriveKey( { name: 'PBKDF2', salt: encoder.encode('my-salt'), iterations: 100000, hash: 'SHA-256', }, keyMaterial, { name: 'AES-GCM', length: 256 }, false, ['encrypt'] );
const iv = crypto.getRandomValues(new Uint8Array(12)); const encrypted = await crypto.subtle.encrypt( { name: 'AES-GCM', iv }, key, encoder.encode(plaintext) );
return { iv, ciphertext: new Uint8Array(encrypted), };}
// Exemplo de usoconst { iv, ciphertext } = await encryptAESGCM('Mensagem secreta', 'minha-senha');console.log('Dados criptografados:', ciphertext);Criptografia assimétrica com RSA-OAEP
RSA usa um par de chaves: pública para criptografar e privada para descriptografar. Exemplo de geração de chaves e criptografia:
// Geração de par de chaves RSAasync function generateRSAKeyPair(): Promise<CryptoKeyPair> { return await crypto.subtle.generateKey( { name: Também na biblioteca
Processamento JSON em Kotlin: bibliotecas e exemplos de uso
Play Services para Kotlin: guia completo com exemplos práticos
Autorização e autenticação em Java: guia completo
Filas de Tarefas em Rust: Visão Geral das Bibliotecas para Processamento Assíncrono
Métricas Prometheus em Go: criação e exportação de métricas em Golang