Image

Base de conocimientos → Un ejemplo de un script php para cifrar y descifrar texto

[Guiones]
Fecha de publicación: 10.10.2023

A continuación se muestra un ejemplo de un script probado en PHP 8.1 para cifrar y descifrar una cadena de texto basada en openssl.

nano encrypt-decrypt.php

my-secret-key-there-2121');

// Encrypt
$plaintext = "Cadena de prueba para cifrado en php 8.1";
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext_raw = openssl_encrypt($plaintext, $cipher, ENCRYPTION_KEY, $options=OPENSSL_RAW_DATA, $iv);
$hmac = hash_hmac('sha256', $ciphertext_raw, ENCRYPTION_KEY, $as_binary=true);
$ciphertext = base64_encode( $iv.$hmac.$ciphertext_raw );
echo $ciphertext.'
';
// Decrypt $c = base64_decode($ciphertext); $ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC"); $iv = substr($c, 0, $ivlen); $hmac = substr($c, $ivlen, $sha2len=32); $ciphertext_raw = substr($c, $ivlen+$sha2len); $plaintext = openssl_decrypt($ciphertext_raw, $cipher, ENCRYPTION_KEY, $options=OPENSSL_RAW_DATA, $iv); $calcmac = hash_hmac('sha256', $ciphertext_raw, ENCRYPTION_KEY, $as_binary=true); if (hash_equals($hmac, $calcmac)) { echo $plaintext; } ?>

La primera línea es el resultado del cifrado y la segunda línea es el descifrado. Es más, si actualizamos la página sin cambiar la frase, siempre obtendremos un resultado diferente, pero al descifrarla será el mismo.

Para separar estas funciones en diferentes archivos, deberá transferir la clave en el parámetro ENCRYPTION_KEY.





Sin comentarios aún