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?

Desde o seu lançamento, em 1985, o fantástico jogo Tetris vende pelo menos 70 milhões de unidades por ano em todo o mundo! Os dados são oficiais e fornecidos pela THQ, uma das distribuidoras do título.


Excesso de barulho dentro do seu gabinete, principalmente logo que você o liga, pode ser sintoma de problemas nas ventoinhas, que podem precisar ser limpas ou trocadas. Entre em contato com um técnico de sua confiança e verifique isso o quanto antes.


A Máquina de Pascal, criada em 1642 pelo filósofo, físico e matemático francês Blaise Pascal, é reconhecida como o primeiro computador do mundo e ele foi criado com o objetivo de calcular impostos. 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.


Instalar vários aplicativos com o mesmo propósito, como editores de texto, reprodutores de músicas ou vídeos e até programas antívirus sobrecarregam o seu sistema operacional e ainda ocupam espaço desnecessário em seu HD. Tenha apenas um bom programa para cada função.