O que será feitoEste artigo vai lhe mostrar como armazenar e recuperar informações de seu banco através de criptografia. Com isso você terá uma maior segurança e privacidade das informações dos usuário de seu sistema. Veja mais sobre criptografia em criptografia.
Funções
CódigosGeração do IVUm vetor de inicialização não é obrigatório para criptografar uma string. Mas caso não seja fornecida para a função responsável o PHP retornará um 'warning'. É possivel você gerar um aleatóriamente através de:
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
MCRYPT_MODE_ECB => É um dos modos do agorítmo da extenção Mcrypt, onde se encontar também: "cbc", "cfb", "ofb", "nofb" ou "stream".
Mas você também pode definir um qualquer, contendo um tamanho máximo definido pelo seu algorítimo de criptografia selecionado. No nosso caso o MCRYPT_RIJNDAEL_128 que seu tamanho máximo é de 16 caracteres ou 128bits. Criptografar stringAtravés do código abaixo você gerará uma string binária contendo sua string criptografada.
$string = 'hellow word';
$chave = 'minha chave secreta'
$string_ecrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $chave, $string, MCRYPT_MODE_ECB, 'meu_iv');
Armazenar string criptografada em bancoSe você verificar, vai perceber que a string gerada pela função mcrypt_encrypt() estará em formato binário, e se você enviar direto para seu banco de dados algo não dará muito certo. Uma das opões para armazenar sua string no banco é convertendo para hexadecimal através da código:
$string_hexa = bin2hex($string_ecrypted);
Com isso é só usar seu ORM ou se você ainda esta nos primórdios utilize seu mysql_query(). Descriptografar sua informação armazenadaDepois de consultar o dado no banco, você tera uma $string_ecrypted. Com isso vamos fazer o seguinte:
$len = strlen($string_ecrypted);
$hex = pack("H" . $len, $string_ecrypted);
rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $chave, $hex, MCRYPT_MODE_ECB, MCRYPT_IV), "\0");
E "voilà", temos novamente nossa informação em seu formato real. Agora você pode me perguntar o porquê do uso do rtrim(). Na verdade eu não sei bem, só sei que as vezes a função mcrypt_decrypt() retorna uns caracteres que não deveria. Então é interessante removê-los. Outra coisa interessante é saber que existem vários outros algorítimos de criptografia disponíveis e você pode encontrá-los em Mcrypt ciphers |