Criptografia em TypeScript: criptografia e hash

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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:                    

Recommendations