openssl_seal

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

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

Описание

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

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

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

data

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

sealed_data

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

env_keys

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

pub_key_ids

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

method

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

Предостережение

Значение по умолчанию ('RC4') считается небезопасным. Настоятельно рекомендуется явно указывать метод безопасного шифрования.

iv

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

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

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

Примеры

Пример #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() - Открыть запечатанные данные