Criptografia e Hashing
O AdonisJs vem com alguns provedores para valores de hash e criptografia de dados. Valores de hash são diferentes de criptografia, pois valores de hash não podem ser descriptografados depois de criptografados, o que não é o caso da criptografia.
Configuração
Para usar Criptografia ou Hashing, você deve configurar seus provedores dentro do arquivo bootstrap/app.js
.
// bootstrap/app.js
const providers = [
// ...
'adonis-framework/providers/EncryptionProvider',
'adonis-framework/providers/HashProvider'
// ...
]
Além disso, é recomendável configurar aliases para ambos dentro do mesmo arquivo.
const aliases = {
// ...
Encryption : 'Adonis/Src/Encryption',
Hash: 'Adonis/Src/Hash'
// ...
}
Criptografando Dados
O provedor de criptografia AdonisJs usa o módulo de criptografia Node.js para criptografar e descriptografar valores. Por padrão, todos os valores são criptografados com um SALT usando o algoritmo aes-256-cbc.
OBSERVAÇÃO
Certifique-se de que appKey dentro de config/app.js
esteja definido antes de criptografar valores.
encrypt(value)
const Encryption = use('Encryption')
const encrypted = Encryption.encrypt('hello world')
decrypted
const Encryption = use('Encryption')
const decrypted = Encryption.decrypt('encrypted value')
Valores de hash
O provedor de hash AdonisJs usa bcrypt para fazer hash de valores, que é um algoritmo lento para fazer hash/verificar um valor.
O Bcrypt é comumente usado para fazer hash de senhas e, como é um algoritmo lento, torna caro (se não impossível) para invasores quebrar uma senha. A lentidão do algoritmo é baseada no número de rodadas a serem executadas antes de retornar o valor com hash.
OBSERVAÇÃO
Por padrão, o provedor de hash usará 10 rodadas, o que levará aproximadamente 1500 ms para fazer hash do valor.
make(value, [rounds=10])
const Hash = use('Hash')
const safePassword = yield Hash.make(request.input('password'))
// or
const safePassword = yield Hash.make(request.input('password'), 20)
verify(value, hashValue)
Como você não pode descriptografar um hash, você pode verificar a entrada do usuário em relação ao valor previamente hash.
const Hash = use('Hash')
const isSame = yield Hash.verify('plain-value', 'hashed-value')
if (isSame) {
// ...
}