Hoje eu vou mostrar para vocês um método bem simples que uso para criptografia AES-256-CBC no PHP, já utilizei inclusive para comunicação entre sistemas desenvolvidos em C# com outro em PHP, mas aí é papo para outro post, hoje vou mostrar apenas esse método.
A coisa é bem simples você cria o método abaixo:
private function encrypt_decrypt($action, $string, $secret_key = null, $secret_iv = null)
{
$output = false;
$encrypt_method = "AES-256-CBC";
$key = hash('sha256', $secret_key);
$iv = substr(hash('sha256', $secret_iv), 0, 16);
switch ($action) {
case 'encrypt': {
$output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
$output = base64_encode($output);
break;
}
case 'decrypt': {
$output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv);
break;
}
}
return $output;
}
Para maior comodidade eu criei esses dois métodos que usam o método de cima e a coisa fica mais simples
public function encryptIt($q, $secret_key = null, $secret_iv = null)
{
return $this->encrypt_decrypt('encrypt', $q, $secret_key, $secret_iv);
}
public function decryptIt($q, $secret_key = null, $secret_iv = null)
{
return $this->encrypt_decrypt('decrypt', $q, $secret_key, $secret_iv);
}
Como uso?
Assim, você instancia a classe e chama o método de encriptar e decriptar, passando como argumento as duas chaves.
$classCript = new ClassCript();
$texto = 'Olá Mundo';
$c_texto = $classCript->encryptIt($texto,'4ba0c50e-d17e-4888-adef-1408b10ed026','9599bc91-24c5-4c7b-8705-ab078528fa0d');
$d_texto = $classCript->decryptIt($c_texto,'4ba0c50e-d17e-4888-adef-1408b10ed026','9599bc91-24c5-4c7b-8705-ab078528fa0d');
echo $texto . '<br>';
echo $c_texto . '<br>';
echo $d_texto . '<br>';