Приведем пример скрипта, протестированного на php 8.1 для шифровки и расшифровки текстовой строки на базе openssl.
nano encrypt-decrypt.php
<?php
define('ENCRYPTION_KEY', '<mark>my-secret-key-there-2121</mark>');
// Encrypt
$plaintext = "<output>Тестовая строка для шифрования в 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>
}
?>
Первой строкой у нас идет результат шифровки, а второй дешифровки. При этом если мы обновим страницу, не меняя фразы, мы будем получать всегда разный результат, при этом при расшифровке он будет одинаковым.
Для разделения данных функций по разным файлам Вам нужно будет перенести ключ в параметре ENCRYPTION_KEY.
Нет комментариев