(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
openssl_seal — Запечатывает, или зашифровывает, данные
$data
,&$sealed_data
,&$encrypted_keys
,$public_key
,$cipher_algo
,&$iv
= null
Функция openssl_seal() запечатывает, или шифрует, данные data
алгоритмом cipher_algo
со случайно сгенерированным секретным ключом.
Затем функция шифрует ключ каждым открытым ключом в массиве public_key
,
и каждый зашифрованный ключ конверта возвращается массиве encrypted_keys
.
Это помогает отправлять запечатанные данные набору получателей (при условии, что открытые ключи получателей доступны).
Каждый получатель получит запечатанные данные и ключ конверта, который функция зашифровала
открытым ключом получателя. После чего функция генерирует вектор инициализации
(англ. Initialization Vector, IV) и возвращает значение вектора в параметре iv
.
data
Данные, которые требуется запечатать.
sealed_data
Данные, которые запечатала функция.
encrypted_keys
Массив зашифрованных ключей.
public_key
Массив экземпляров класса OpenSSLAsymmetricKey, которые содержат открытые ключи.
cipher_algo
Алгоритм шифрования.
До PHP 8.0 по умолчанию параметру назначали значение 'RC4'
,
которое считают небезопасным. Настоятельно рекомендуют явно указывать безопасный
метод шифрования.
iv
Вектор инициализации для расшифровки данных data
. Параметр устанавливают,
только если методу шифрования требуется вектор инициализации. Значение вектора узнают путём вызова
функции openssl_cipher_iv_length() с алгоритмом шифрования cipher_algo
.
Вектор инициализации невозможно указать явно. Значение, которое установили в параметре, перезаписывается значением, которое функция сгенерировала случайно.
Функция возвращает длину запечатанных данных или false
.
В случае успешного выполнения параметр sealed_data
будет содержать
запечатанные данные, а параметр encrypted_keys
— зашифрованные ключи.
Версия | Описание |
---|---|
8.0.0 |
Параметр public_key теперь принимает массив (array) экземпляров
класса OpenSSLAsymmetricKey;
раньше принимался массив (array) ресурсов (resource) с типом OpenSSL key .
|
8.0.0 |
Параметр cipher_algo теперь обязательный параметр.
|
8.0.0 |
Параметр iv теперь принимает значение null.
|
Пример #1 Пример запечатки данных функцией openssl_seal()
<?php
// Переменная $data содержит данные, которые требуется запечатать
$data = "test";
// Получаем и подготавливаем открытые ключи получателей
$pk1 = openssl_get_publickey("file://cert1.pem");
$pk2 = openssl_get_publickey("file://cert2.pem");
// Запечатываем сообщение; только владельцы ключей $pk1 и $pk2 расшифруют
// запечатанные данные $sealed ключами $ekeys[0] и $ekeys[1]
if (openssl_seal($data, $sealed, $ekeys, array($pk1, $pk2), 'AES256', $iv) > 0) {
// Запечатанные данные $sealed и значения вектора инициализации $iv сохраняют,
// чтобы позднее использовать значения при вызове функции openssl_open
echo "success\n";
}
?>