(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
openssl_open — Открывает запечатанные данные
$data
,&$output
,$encrypted_key
,$private_key
,$cipher_algo
,$iv
= null
Функция openssl_open() открывает, или дешифрует, данные data
ключом конверта, который получает после расшифровки зашифрованного ключа encrypted_key
открытым ключом private_key
. Расшифровать данные
функции помогают алгоритм шифрования cipher_algo
и вектор инициализации iv
.
Вектор инициализации требуется, только если его запрашивает метод шифрования.
Функция заполняет аргумент output
данными, которые расшифровала.
Функция генерирует ключ конверта, когда данные запечатали открытым ключом, который
связан с закрытым ключом. Подробнее о запечатке, или шифровании, данных рассказывает описание функции openssl_seal().
data
Запечатанные данные.
output
Функция заполнит аргумент открытыми данными, если завершит работу без ошибок.
encrypted_key
Симметричный ключ шифрования, который расшифровывают закрытым ключом private_key
.
private_key
Закрытый ключ для расшифровки зашифрованного ключа encrypted_key
.
cipher_algo
Метод шифрования для расшифровки данных data
.
До PHP 8.0 по умолчанию параметру назначали значение 'RC4'
,
которое считают небезопасным. Настоятельно рекомендуют явно указывать безопасный
метод шифрования.
iv
Вектор инициализации для расшифровки данных data
. Параметр устанавливают,
только если методу шифрования требуется вектор инициализации. Значение вектора узнают путём вызова
функции openssl_cipher_iv_length() с алгоритмом шифрования cipher_algo
.
Функция возвращает true
, если выполнилась успешно, или false
, если возникла ошибка.
Версия | Описание |
---|---|
8.0.0 |
Параметр private_key теперь принимает экземпляр OpenSSLAsymmetricKey
или OpenSSLCertificate;
раньше принимался ресурс (resource) с типом OpenSSL key или OpenSSL X.509 CSR .
|
8.0.0 |
Параметр cipher_algo теперь обязателен.
|
Пример #1 Пример распечатки данных функцией openssl_open()
<?php
// Предположим, что переменные $sealed, $env_key и $iv содержат запечатанные данные,
// ключ конверта и вектор инициализации, которые прислал тот, кто запечатал данные
// Получаем закрытый ключ из файла private_key.pem
$pkey = openssl_get_privatekey("file://private_key.pem");
// Расшифровываем данные и сохраняем открытые данные в аргументе $open
if (openssl_open($sealed, $open, $env_key, $pkey, 'AES256', $iv)) {
echo "Вот открытые данные: ", $open;
} else {
echo "Не удалось открыть данные";
}
?>