Você está na página 1de 10

24/10/2019 Criptografando e Descriptografando Dados com NodeJS

Criptografando e Descriptografando
Dados com NodeJS
Matheus Castiglioni
Jan 5, 2018 · 9 min read

Temos um sistema em produção, porém, temos a necessidade de uma


nova feature(funcionalidade), precisamos implementar um cadastro de usuários, onde
cada usuário terá um email e senha para futuramente implementarmos um sistema
de login(autenticação).

Para exemplo do post vou utilizar a linguagem Node junto com MongoDB.

Como temos um time muito eficiente, a nova feature já foi criada e disponibilizada para
testes, então vamos começar \o/

https://medium.com/collabcode/criptografando-e-descriptografando-dados-com-nodejs-f3f34a9390e4 1/10
24/10/2019 Criptografando e Descriptografando Dados com NodeJS

Testando a nova feature


Os passos que iremos seguir para realizar os testes são:

1. Verificar se já existe algum usuário cadastrado

2. Caso não exista, cadastrar um novo usuário

3. Verificar como os dados do novo usuário foram cadastrados

Buscando usuários já cadastrados


Para realizar a busca dos usuários existentes em nosso banco de dados, foi nos informado
que devemos realizar uma requisição do tipo GET para o seguinte
endereço: http://localhost:3000/anboo/api/usuarios.

https://medium.com/collabcode/criptografando-e-descriptografando-dados-com-nodejs-f3f34a9390e4 2/10
24/10/2019 Criptografando e Descriptografando Dados com NodeJS

Como podemos ver, ainda não possuímos nenhum usuário cadastrado em nosso banco
de dados, então vamos incluir o primeiro.

Cadastrando novo usuário


Como ainda não temos nenhum usuário em nosso banco de dados devemos começar
incluindo um novo, assim poderemos verificar se nossa feature está funcionando de
forma correta, para testar um novo cadastro devemos passar o email e senha à serem
cadastrados para a requisiçào do tipo POST informando o mesmo
endereço: http://localhost:3000/anboo/api/usuarios .

E como resposta:

https://medium.com/collabcode/criptografando-e-descriptografando-dados-com-nodejs-f3f34a9390e4 3/10
24/10/2019 Criptografando e Descriptografando Dados com NodeJS

Verificando dados cadastrados


Ué, tem algo estranho, recebemos como resposta os dados do usuário que foram salvos?
Para confirmar vamos novamente realizar a busca e verificar os usuários existentes em
nosso banco de dados:

Realmente, a senha foi salva como “123456” em nosso banco de dados, mas será que
isso é uma boa prática?

https://medium.com/collabcode/criptografando-e-descriptografando-dados-com-nodejs-f3f34a9390e4 4/10
24/10/2019 Criptografando e Descriptografando Dados com NodeJS

Com toda certeza não, dessa forma qualquer pessoa que tenha acesso ao nosso banco de
dados é capaz de ver a senha de todos os usuários existentes, tornando nossa api nenhum
pouco segura, mas como podemos resolver isso?

Criptografia
Pois é, se você pensou em Criptografia fico feliz em dizer que acertou, para você que não
acertou não tem problema e para você que não conhece esse termo não tenha pressa, vou
explicar logo a seguir.

O que é criptografia?
Lembra na época da escola quando brincávamos com a língua do P? Para falar “Casa” a
gente falava: “Pca”, “Psa”, em outras palavras, transformávamos a
palavra casa em pcapsa, pois é, estávamos realizando uma criptografia sem ao menos
saber, basicamente o conceito é esse.

Podemos dizer e reduzir criptografia como: “Transformar algo que todo mundo sabe o
significado em algo que poucas ou quase nenhuma pessoa sabe o que significa”.

Nesse caso é exatamente isso que devemos fazer com nosso banco de dados, ao salvar o
usuário, sua senha deve ser transformada em algo que ninguém consegue ler, mas como
podemos fazer isso com NodeJS?

Criptografando a senha
Para criptografar uma senha com NodeJS podemos utilizar o módulo Crypto onde é
possível realizar várias operações em relação a criptografia, principalmente com os
objetos Cipher e Decipher .

Criando objeto responsável pela criptografia


Para começar a criptografar uma senha devemos criar um objeto Cipher , o mesmo é
responsável por criptografar dados, para criá-lo temos um método auxiliar dentro do
módulo crypto chamado createCipher :

https://medium.com/collabcode/criptografando-e-descriptografando-dados-com-nodejs-f3f34a9390e4 5/10
24/10/2019 Criptografando e Descriptografando Dados com NodeJS

Apenas isso não é suficiente, devemos passar alguns parâmetros para a criação do objeto,
sendo eles: algoritmo utilizado para realizar a criptografia e segredo utilizado
para criptografar. Então vamos começar criando um objeto responsável por
armazenar essas configurações:

Assim podemos passá-los para o método createCipher e reaproveitarmos em outros


pedaços de nosso código(se necessário), com isso, qualquer mudança necessária será
feita em apenas um lugar.

Criptografando dados
Após realizar o passo anterior já devemos ter nosso objeto Cipher criado, precisamos
agora dizer para ele qual será a nossa informação à ser criptografada.

Como podem ver, podemos fazer isso através do método update . Por último devemos de
fato realizar a criptografia dos dados:

Aqui precisamos passar o tipo de criptografia que será utilizada, então como trata-se de
um parâmetro vamos adicioná-lo em nosso objeto de configuração:

https://medium.com/collabcode/criptografando-e-descriptografando-dados-com-nodejs-f3f34a9390e4 6/10
24/10/2019 Criptografando e Descriptografando Dados com NodeJS

Assim nossa função e objeto fica da seguinte maneira:

Testando a criptografia
Com a nossa função responsável por criptografar dados pronta, podemos testá-la ao
cadastrar o mesmo usuário novamente, porém fazendo uso dela antes de realmente
persistir os dados:

E como resposta temos:

https://medium.com/collabcode/criptografando-e-descriptografando-dados-com-nodejs-f3f34a9390e4 7/10
24/10/2019 Criptografando e Descriptografando Dados com NodeJS

Como podemos ver, agora nossa senha foi transformada


de 123456 para a75959730e9d4f4fd26c1f0c8d73b1ac, assim quando uma pessoa
qualquer acessar nosso banco de dados não saberá o que significado essa String cheia de
números e letras misturados.

Descriptografia
Agora para você que deve estar pensando, como podemos obter novamente o valor da
senha, equivalente aos 123456, como tudo que vai, tudo pode voltar, para isso usamos a
descriptografia, como podem observar, é o inverso da criptografia, aqui pegamos algo
que ninguém sabe e transformamos em algo que todo mundo sabe.

Em outras palavras
transformamos a75959730e9d4f4fd26c1f0c8d73b1acnovamente em 123456.

Descriptografando a senha
O processo para descriptografar é basicamente o mesmo da criptografia, mudando
apenas os parâmetros passado para os métodos update e final , além claro, do nosso
objeto.

https://medium.com/collabcode/criptografando-e-descriptografando-dados-com-nodejs-f3f34a9390e4 8/10
24/10/2019 Criptografando e Descriptografando Dados com NodeJS

Veja que reaproveitamos alguns parâmetros existentes em nosso objeto de configuração,


mudamos o objeto de Cipher para Decipher e como já mencionado antes, trocamos
alguns parâmetros dos métodos update e final . Com isso já podemos ter nossa senha
visível de forma legível:

E voalá \o/, a senha esta visível novamente.

https://medium.com/collabcode/criptografando-e-descriptografando-dados-com-nodejs-f3f34a9390e4 9/10
24/10/2019 Criptografando e Descriptografando Dados com NodeJS

https://medium.com/collabcode/criptografando-e-descriptografando-dados-com-nodejs-f3f34a9390e4 10/10

Você também pode gostar