Criptografia
Usando o serviço de criptografia, você pode criptografar e descriptografar valores em seu aplicativo. A criptografia é baseada no algoritmo aes-256-cbc, e anexamos um hash de integridade (HMAC) à saída final para evitar adulteração de valor.
O serviço de criptografia
usa a appKey
armazenada dentro do arquivo config/app.ts
como o segredo para criptografar os valores.
Variáveis de ambiente. Qualquer pessoa com acesso a essa chave pode descriptografar valores.
A chave deve ter pelo menos 16 caracteres e ter um valor aleatório criptograficamente seguro. Você pode gerar a chave usando o comando
node ace generate:key
.Se você decidir alterar a chave mais tarde, não poderá descriptografar os valores existentes. Isso resultará na invalidação de cookies e sessões de usuário existentes.
Criptografando valores
Você pode criptografar valores usando o método encryption.encrypt
. O método aceita o valor a ser criptografado e uma duração de tempo opcional após a qual considerar o valor expirado.
import encryption from '@adonisjs/core/services/encryption'
const encrypted = encryption.encrypt('hello world')
Defina uma duração de tempo após a qual o valor será considerado expirado e não poderá ser descriptografado.
const encrypted = encryption.encrypt('hello world', '2 hours')
Descriptografando valores
Valores criptografados podem ser descriptografados usando o método encryption.decrypt
. O método aceita o valor criptografado como o primeiro argumento.
import encryption from '@adonisjs/core/services/encryption'
encryption.decrypt(encryptedValue)
Tipos de dados suportados
O valor dado ao método encrypt
é serializado para uma string usando JSON.stringify
. Portanto, você pode usar os seguintes tipos de dados JavaScript.
- string
- number
- bigInt
- boolean
- null
- object
- array
import encryption from '@adonisjs/core/services/encryption'
// Object
encryption.encrypt({
id: 1,
fullName: 'virk',
})
// Array
encryption.encrypt([1, 2, 3, 4])
// Boolean
encryption.encrypt(true)
// Number
encryption.encrypt(10)
// BigInt
encryption.encrypt(BigInt(10))
// Objetos Date são convertidos em string ISO
encryption.encrypt(new Date())
Usando chaves secretas personalizadas
Você pode criar uma instância da classe Encryption diretamente para usar chaves secretas personalizadas.
import { Encryption } from '@adonisjs/core/encryption'
const encryption = new Encryption({
secret: 'alongrandomsecretkey',
})