Image

База знаний → Пример php скрипта для шифровки и расшифровки текста

[Скрипты]
Дата публикации: 10.10.2023

Приведем пример скрипта, протестированного на 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.





Нет комментариев