Agora vou falar um pouco sobre como criptografar dados usando o MySQL. Essa técnica é utilizada para armazenar dados de login, aliás, muitos pensam que somente o campo senha deve ser criptografado, mas já vi sistemas em que o nível de segurança era tão alto que até o nome do usuário era criptografado, para que ninguém sequer tivesse acesso a eles.
Segurança de dados é algo muito sério e você deve tomar todos os cuidados para garantir que as informações dos usuários do seu sistema estejam bem protegidas.
Vou criar uma base de dados chamada TesteCriptografia e uma tabela para armazenar nome de usuário e senha.

 

 

Em seguida vou alterar a forma como o MySQL vai receber e armazenar os caracteres e suas codificações na coluna senha. Irei definir o conjunto de caracteres para latin1 e sua codificação para latin1_general_ci, conforme figura abaixo:

 

 

O comando acima definiu, para a coluna senha, o conjunto padrão de caracteres como sendo do grupo latin1 e a codificação como latin1_general_ci. Isso é necessário para que esse campo aceite os dados criptografados que vamos inserir. Se não fizer isso e sua tabela estiver utilizando como codificação padrão qualquer uma das que não dão suporte a esses caracteres, você receberá o famoso erro 1366: “InvalidStringValue”.
Bem, agora que nossa tabela está pronta para receber os dados, vamos entender como criptografá-los e enviar para o banco.
Eu darei um exemplo utilizando o algoritmo AES, disponível no MySQL a partir da versão 4.0.2, e que é extremamente seguro, pois utiliza uma chave de criptografia de 128 bits.
Sua sintaxe é bastante simples. Para criptografar, usa-se:

AES_ENCRYPT(string_a_ser_criptografada, chave_usada_para_criptografar)

E para decriptografar:

AES_DECRYPT(nome_do_campo_da_tabela, chave_usada_para_criptografar)

Parece complicado, mas é bastante simples. Vamos a um exemplo. Vou inserir, na tabela que criei, um usuário chamado Daniel, com senha saocarlos e a chave para o algoritmo utilizar nessa criptografia será microsoft. Vejamos como ficará nosso comando MySQL:

insert into usuario values (“daniel”, AES_ENCRYPT(“saocarlos”, “microsoft”));

Ilustrando o código com comentários, teremos:

 

 

E então, se tentarmos ver o conteúdo do campo senha dando um simples SELECT, receberemos isso como retorno:

 

 

O campo "senha" exibirá essa informação de maneira ilegível, que é o resultado da criptografia da palavra “saocarlos” utilizando o algoritmo AES com chave “microsoft”.
Para decriptografar o campo, uma das opções é:

SELECT nome, AES_DECRYPT(senha, “microsoft”) FROM usuário;

 

 

Vou fazer uma demonstração errando a chave de criptografia. Vou executar o seguinte comando:

SELECT nome, AES_DECRYPT(senha, “apple”) FROM usuario;

 

 

O MySQL nos retornou o valor null, pois não foi possível decriptografar com essa chave.

Para tornar sua aplicação ainda mais segura, recomendo que você crie, no momento da conexão com o banco, uma variável que armazene sua chave, então não será preciso ficar inserindo-a no comando SQL a todo o momento. Por exemplo:

SELECT @chave:="microsoft";

Com isso criamos uma variável chamada chave, e armazenamos nela a string “microsoft”. Agora, nas chamadas para consulta ou gravação de valores criptografados podemos fazer da seguinte forma:

SELECT nome, AES_DECRYPT(senha, @chave) FROM usuario;

 

 

Percebam que a consulta funcionou, pois o banco nos retornou a senha decriptografada, mas no comando utilizamos a variável chave no lugar da palavra “microsoft”, que é o valor da chave. Isso torna o processo ainda mais seguro.


Outras dicas de MySQL


Adicionando colunas a uma tabela já existente

Alterando colunas de uma tabela já existente

Como salvar consulta do MySQL em CSV

Criando uma tabela a partir de outra já existente

Criando usuários e atribuindo permissões

Criptografando dados no MySQL

Descobrindo o tamanho em Mb da sua base de dados

Duplicando uma base de dados (backup da base de dados)

Duplicando uma tabela

Encontrando registros duplicados

Exibindo dados em formato de formulário

Exibindo permissões

Exibindo usuários

Gerando um dump de todas as bases de dados

Gerando um dump de uma base de dados específica

Gerando um dump de uma tabela específica

Gerando um dump somente da base de dados

Identificando e contando registros duplicados

Lendo dados criptografados no MySQL com C#

Removendo colunas a uma tabela já existente

Removendo permissões

Removendo registros duplicados e deixando somente o mais antigo

Removendo registros duplicados e deixando somente o mais recente

Renomeando uma tabela

Restaurando um dump

Retornando apenas os primeiros caracteres do campo – Função Left

Retornando apenas os últimos caracteres do campo – Função Right

Selecionando apenas parte de um campo

Selecionando X registros randômicos de uma tabela

Zerando um campo auto incremento

Você Sabia?

A partida mais longa do clássico Space Invaders durou incríveis 38 horas e 32 minutos e esta façanha foi conseguida por um jogador de apenas 12 anos! O jogo, claro, podia ser pausado para alimentação e descanso, mas ainda assim o recorde, estabelecido no dia 02/09/1980, ainda não foi quebrado. Saiba mais.


O ENIAC, primeiro computador valvulado do mundo, possuía 17.000 válvulas, 500.000 pontos de solda, 30 toneladas de peso e ocupava uma área de 180 metros quadrados. Clique aqui e conheça mais sobre a história dos computadores.


Street Fighter 2, lançado para o Super Nintendo no início dos anos 90, foi o principal responsável pelo aumento nas vendas deste console. Graças ao sucesso do título nos Arcades e à perfeita adaptação ao console, muitos consumidores adquiriram o SNES para jogarem o título em casa. Saiba mais.


O Playstation só nasceu porque uma parceria entre Sony e Nintendo, para desenvolver uma unidade de CD para o Super Nintendo, fracassou. Clique aqui e saiba mais.


A IBM detém o recorde de patentes em um único ano, atingindo a marca de 4186 registros no ano de 2008. Clique aqui e saiba mais sobre esta gigante do mundo da tecnologia.