Criptografar e descriptografar com Node.js
1a atrás
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)