Voici un exemple de script testé sur PHP 8.1 pour chiffrer et déchiffrer une chaîne de texte basé sur openssl.
nano encrypt-decrypt.php
<?php
define('ENCRYPTION_KEY', '<mark>my-secret-key-there-2121</mark>');
// Encrypt
$plaintext = "<output>Chaîne de test pour le chiffrement en php 8.1</output>";
$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 );
<output>echo $ciphertext.'<br>';</output>
// 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))
{
<output>echo $plaintext;</output>
}
?>
La première ligne est le résultat du cryptage et la deuxième ligne est le résultat du décryptage. De plus, si nous actualisons la page sans changer la phrase, nous obtiendrons toujours un résultat différent, mais une fois déchiffré, ce sera le même.
Pour séparer ces fonctions en différents fichiers, vous devrez transférer la clé dans le paramètre ENCRYPTION_KEY.
Aucun commentaire pour l'instant