A criptografia é uma técnica que pode ser utilizada para manter as informações dos bancos de dados em sigilo, protegidas. Por meio dela, é possível evitar que pessoas não autorizadas tenham acesso aos dados armazenados, pois somente aqueles que possuem a devida chave de criptografia serão capazes de visualizá-los.
No MySQL, temos um mecanismo nativo de criptografia que, por meio de algoritmos específicos, permite encriptar (e decriptar, dependendo da solução adotada) os dados das tabelas. Nesse artigo, conheceremos os dois algoritmos mais utilizados: o MD5 e o AES.
Saiba mais sobre o MySQL com o guia de referência desse banco de dados
Utilizando MD5
O MD5 é um dos algoritmos de criptografia mais conhecidos, e seu funcionamento consiste na geração de um valor hexadecimal de 32 dígitos a partir de uma string. Esse processo, no entanto, é unidirecional, ou seja, uma vez aplicada, essa função criptográfica não pode ser revertida a fim de recuperar o valor original.
A natureza desse tipo de algoritmo ajuda nos quesitos de segurança (principalmente para salvar dados sensíveis como a senha do usuário), já que mesmo que os dados criptografados sejam hackeados, o invasor não terá como descriptografá-los.
Para aplicar esse algoritmo no MySQL, dispomos da função MD5, que recebe como único parâmetro o texto a ser criptografado e retorna o valor mascarado. Assim, podemos utilizá-la diretamente ao inserir um registro na tabela, como no exemplo:
INSERT INTO usuarios (login, senha) VALUES ("usuario_1", MD5("abc123"));
Feito isso, podemos executar um SELECT nessa tabela e observar que o valor inserido na coluna senha se encontra criptografado, como mostra a Figura 1. Perceba que em vez do valor “abc123”, agora temos um texto do qual não se pode extrair o conteúdo original.
Utilizando AES
O algoritmo AES, por sua vez, implementa um modelo simétrico de criptografia. Esse modelo define algoritmos que usam uma mesma chave (um valor pré-estabelecido de no máximo 128 bits) tanto para encriptar quanto para decriptar os dados. Em outras palavras, a chave funciona como um contrato entre as partes que precisam trocar dados de forma segura, e só quem tiver tal chave poderá entender que dados estão sendo trafegados.
No MySQL, a criptografia com AES pode ser aplicada por meio da função AES_ENCRYPT, enquanto para o processo inverso temos a função AES_DECRYPT. Ambas recebem dois parâmetros: o texto a ser criptografado ou descriptografado, e a chave.
O código a seguir mostra como podemos inserir um dado criptografado em uma tabela:
INSERT INTO usuarios (login, senha) VALUES ("usuario_2", AES_ENCRYPT("abc123", "chave"));
Feito isso, podemos verificar o conteúdo desse usuário realizando um SELECT na tabela. O resultado, nesse caso, é mostrado na Figura 2.
Observe que o valor inserido é incompreensível, no entanto, ele pode ser revertido por meio da função AES_DECRYPT, como mostra o código:
select nome, CAST(AES_DECRYPT(senha,"Chave_para_descriptografar") as char) from pessoa WHERE id ="2";
Para visualizar o conteúdo original, precisamos ainda realizar um cast (conversão) para o tipo char, pois originalmente o retorno dessa função é visualizado em sua forma binária.
O resultado é apresentado na Figura 3.
Enfim, a criptografia é amplamente utilizada nos mais variados tipos de sistemas, independentemente da plataforma ou banco de dados empregados. Por meio dela, adicionamos uma camada de segurança que é fundamental para evitar que os dados sejam acessados por indivíduos não autorizados. Por isso, conhecer as funções disponíveis nas linguagens e bancos de dados que adotamos é fundamental para garantir que os softwares desenvolvidos contem com esse importante recurso.
Curso relacionado: MySQL