Я пытаюсь зашифровать и сохранить строки в PHP в соответствии с примером № 1 на PHP документация openssl_encrypt.
<?php
//$key должен был быть предварительно сгенерирован криптографически безопасным способом, например openssl_random_pseudo_bytes.
$plaintext = "сообщение, которое нужно зашифровать";
$шифр = "aes-128-gcm";
если (in_array($шифр, openssl_get_cipher_methods ()))
{
$ivlen = openssl_cipher_iv_length($шифр);
$iv = openssl_random_pseudo_bytes($ивлен);
$ зашифрованный текст = openssl_encrypt ($простой текст, $ шифр, $ключ, $опций=0, $IV, $тег);
//сохраняем $шифр, $iv и $тег для расшифровки позже
$original_plaintext = openssl_decrypt($зашифрованный текст, $ шифр, $ключ, $опций=0, $IV, $тег);
эхо $исходный_открытый текст."\n";
}
?>
Если пользователь несет ответственность за запоминание $ключ
, безопасно ли хранить $iv
вместе с зашифрованной строкой в базе данных?
Из этого другого вопроса AES 256 CBC - Хранение локальных данных, как сохранить вектор IV? и другие, я вижу важность уникального $iv
но в ответе упоминается:
Если вы используете AES-CBC, вы можете хранить IV так, как вам нравится. Не важно держать IV в секрете; вам просто нужно убедиться, что противник не может заранее предсказать IV.
Это относится и к GCM?
РЕДАКТИРОВАТЬ: Если я не ошибаюсь, этот ТАК вопрос, Попытка расшифровать с помощью aes-256-gcm с php это ответ.(что да, IV и тег могут храниться вместе с зашифрованным текстом)