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?
Música tema do Blanka
Até a primeira metade dos anos 90 era bastante comum que as trilhas sonoras dos games fossem criadas por mulheres e a responsável pelas músicas do clássico Street Fighter 2 foi Yoko Shimomura. Segundo ela, o ritmo "Tararirarin" da música tema do personagem Blanka, do Brasil, veio à sua cabeça enquanto ela estava no trem a caminho da Capcom.
PDP-1
O primeiro computador a conseguir rodar o jogo Spacewar era o PDP-1, que custava 120 mil dólares e pertencia ao Massachusetts Institute of Technology. O jogo demorou 200 horas para ser desenvolvido, em 1962, e seu criador foi um cientista da computação chamado Steve Russel.
Tetris
O título Tetris detém o recorde de jogo mais adaptado de todos os tempos. No total foram mais de 60 plataformas diferentes que receberam alguma versão do quebra-cabeças criado por Alexey Pajitnov. Conheça mais sobre este incrível jogo clicando aqui.
Nintendo Wii
Nos primeiros oito dias após o lançamento do console Nintendo Wii foram vendidas 600 mil unidades. Isso equivale a quase um por segundo e estes incríveis números são referentes às vendas apenas nos EUA!
Pac Man
Apenas no ano de 1982, o clássico Pac Man vendeu mais de 400 mil máquinas de fliperama em todo o mundo e recebeu cerca de 7 bilhões de moedas nestas máquinas. Saiba mais.