sexta-feira, 13 de maio de 2011

Criptografia no mysql

Segurança nunca é demais quando estamos tratando com dados importantes para nossos usuários. Pensando nisto, resolvi postar hoje um tutorial bem simples de como criptografar dados em suas tabelas no MySQL. 
Para criptografar dados no MySQL vamos utilizar a função AES_ENCRYPT() eAES_DECRYPT(), ambas estão disponíveis desde a versão 4.0.2 do banco de dados e podem ser consideradas como a função mais segura atualmente. 
A vantagem desta função é que você poderá utilizar uma chave privada para encriptar e desencriptar os dados, permitindo a gravação dos dados seguramente e a leitura da mesma forma como foram gravados

Mas como faço para inserir um registro em minha tabela no MySQL com um campo encriptado?

Simples, vejam:

INSERT INTO TBL_DADOS(CAMPO1, CAMPO2) VALUES('Meu valor não encriptado', AES_ENCRYPT('Meu valor encriptado', 'MINHA_CHAVE'); 

Onde "MINHA_CHAVE" pode ser qualquer palavra chave que será utilizada para desencriptar os seus dados. 
O resultado de um campo encriptado é um valor binário como por exemplo :
mž ?ôz DF“ ‘²šaѵÓׯ| fõÎ*-^êäÃ

Para tornar a inserção mais segura, você poderá utilizar uma variável registrada no momento da conexão com o banco de dados, assim:

SELECT @CHAVE_CRIPTOGRAFIA := 'minha_chave';

E nos seus comandos SQL, utilize a variável normalmente:

INSERT INTO TBL_DADOS(CAMPO1, CAMPO2) VALUES('Meu valor não encriptado', AES_ENCRYPT('Meu valor encriptado', @CHAVE_CRIPTOGRAFIA);

Mas como faço para descriptografar os dados?

Basta utilizar a função inversa AES_DECRYPT passando o campo e a chave que você utilizou para encriptar o dado.

SELECT AES_DECRYPT(CAMPO2, @CHAVE_CRIPTOGRAFIA) FROM TBL_DADOS;

Nenhum comentário:

Postar um comentário