Criptografar e descriptografar com Node.js

1a atrás

0 0

Para criptografia e descriptografia de dados no Node.js vamos usar a biblioteca crypto:

import { createCipheriv, createDecipheriv, randomBytes } from 'crypto';

Criptografar

Para criptografia use o código abaixo:

export const encrypt = (data: string) => {
  const
    iv = randomBytes(16),
    cipher = createCipheriv('aes-256-gcm', Buffer.from(process.env.SECRET as string), iv);

  const
    encrypted = Buffer.concat([cipher.update(data), cipher.final()]),
    authTag = cipher.getAuthTag(),
    bufferLength = Buffer.alloc(1);

  bufferLength.writeUInt8(iv.length, 0);

  return Buffer.concat([bufferLength, iv, authTag, encrypted]).toString('hex');
}

Como usar:

encrypt('Hello World!'); // 106b2b43d3247e6d9001656b4b12ebe2ac8ec6633e2d641925e716625b3769b74eb37337e517b2f96ce5c049f1

Explicação da função- iv - array de inicialização para criptografia- chiper - é a instância do algoritmo de criptografia, aes-256-gcm, nesse caso- SECRET - é uma sequência de 32 caracteres, no código ele veio do ambiente (proccess.env)- encrypted - é o resultado da criptografia- authTag - é uma tag de autenticação necessária no aes-256-gcm, ela garante a integridade dos dados- No final todas essas informações são concatenadas e é retornada uma string no formato hexadecimal

Descriptografar

E para descriptografia:

export const decrypt = (text: string) => {
  const data = Buffer.from(text, 'hex');

  const
    ivSize = data.readUInt8(0),
    iv = data.slice(1, ivSize + 1),
    authTag = data.slice(ivSize + 1, ivSize + 17);

  const decipher = createDecipheriv('aes-256-gcm', Buffer.from(process.env.SECRET as string), iv);

  decipher.setAuthTag(authTag);

  return Buffer.concat([decipher.update(data.slice(ivSize + 17)), decipher.final()]).toString();
}

Como usar:

decrypt('106b2b43d3247e6d9001656b4b12ebe2ac8ec6633e2d641925e716625b3769b74eb37337e517b2f96ce5c049f1'); // Hello World!

Explicação da função:- text - é o texto em hexadecimal resultado da primeira função- a posição de iv, authTag e o texto encriptado são encontrados- No final é retornado a string sem criptografia


Comentários (0)

0/512
Link