(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 "Не удалось открыть данные";
}
?>