openssl_seal

(PHP 4 >= 4.0.4, PHP 5, PHP 7)

openssl_sealЗапечатать (зашифровать) данные

Описание

int openssl_seal ( string $data , string &$sealed_data , array &$env_keys , array $pub_key_ids [, string $method = "RC4" [, string &$iv ]] )

openssl_seal() запечатывает (шифрует) data, используя метод method со сгенерированным случайно секретным ключем. Ключ будет зашифрован каждым открытым ключом, указанном в массиве pub_key_ids, и каждый зашифрованный ключ будет помещен в env_keys. То есть вы можете разослать запечатанные данные сразу нескольким получателям. Каждый получатель должен получить как запечатанные данные, так и зашифрованный соответствующим открытым ключем ключ для их открытия.

Список параметров

data

Запечатываемые данные.

sealed_data

Запечатанные данные.

env_keys

Массив зашифрованных ключей.

pub_key_ids

Массив идентификаторов открытых ключей.

method

Метод шифрования.

iv

Инициализирующий вектор.

Возвращаемые значения

Возвращает длину запечатанных данных или FALSE. В случае успеха в sealed_data будут содержаться запечатанные данные, а в env_keys зашифрованные ключи.

Список изменений

Версия Описание
7.0.0 Добавлен параметр iv.
5.3.0 Добавлен параметр method.

Примеры

Пример #1 Пример использования openssl_seal()

<?php
// $data содержит данные для запечатывания

// извлекаем открытые ключи получателей и подготавливаем их
$fp fopen("/src/openssl-0.9.6/demos/maurice/cert.pem""r");
$cert fread($fp8192);
fclose($fp);
$pk1 openssl_get_publickey($cert);
// повторяем для второго получателя
$fp fopen("/src/openssl-0.9.6/demos/sign/cert.pem""r");
$cert fread($fp8192);
fclose($fp);
$pk2 openssl_get_publickey($cert);

// задаем метод
$method 'AES256';

// генерируем IV
$ivLength openssl_cipher_iv_length$method );
$iv openssl_random_pseudo_bytes$ivLength$strong );
if (! 
$strong) {
 
error_log('Инициализирующий вектор может быть не крипографически сильным!');
}

// запечатываем сообщение, только владельцы $pk1 и $pk2 смогут его распечатать,
// используя ключи $ekeys[0] и $ekeys[1] соответственно.
openssl_seal($data$sealed$ekeys, array($pk1$pk2), $method$iv);

// освобождаем ресурсы ключей
openssl_free_key($pk1);
openssl_free_key($pk2);
?>

Смотрите также

  • openssl_open() - Открыть запечатанные данные