Ваше сообщение openssl_encrypt
изменяет $tag
по ссылке, поскольку вы используете aes-128-gcm
.
Этот параметр требуется для openssl_decrypt
также (при использовании AEAD - Authenticated Encryption and Decryption) и являетсявероятно, пустая строка в вашем случае, когда вы пропускаете вызов openssl_encrypt
.
См. Пример 1 в документации:
Комментарий о сохранении $cipher, $iv, and $tag
- этоважная часть:
<?php
//$key should have been previously generated in a cryptographically safe way, like openssl_random_pseudo_bytes
$plaintext = "message to be encrypted";
$cipher = "aes-128-gcm";
if (in_array($cipher, openssl_get_cipher_methods()))
{
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext = openssl_encrypt($plaintext, $cipher, $key, $options=0, $iv, $tag);
//store $cipher, $iv, and $tag for decryption later
$original_plaintext = openssl_decrypt($ciphertext, $cipher, $key, $options=0, $iv, $tag);
echo $original_plaintext."\n";
}
?>