(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
openssl_pkcs7_encrypt — Шифрует сообщение S/MIME
$input_filename
,$output_filename
,$certificate
,$headers
,$flags
= 0,$cipher_algo
= OPENSSL_CIPHER_AES_128_CBC
openssl_pkcs7_encrypt() читает сообщение из файла
input_filename
, шифрует его с помощью 40-битного RC2
шифра таким образом, что расшифровать его могут только получатели,
указанными в certificate
.
input_filename
output_filename
certificate
Массив, либо единичный сертификат X.509.
headers
headers
задаётся массивом заголовков,
которые будут добавлены в начало сообщения перед шифрованием.
headers
может быть как ассоциативным массивом,
где в качестве ключей используются имена заголовков, либо индексированным
массивом, содержащим полные строки заголовков.
flags
flags
используется для настройки процесса шифрования.
Смотрите Константы PKCS7.
cipher_algo
Одна из констант шифров.
Возвращает true
в случае успешного выполнения или false
в случае возникновения ошибки.
Версия | Описание |
---|---|
8.1.0 |
Алгоритм шифрования по умолчанию (cipher_algo ) теперь AES-128-CBC (OPENSSL_CIPHER_AES_128_CBC ).
Ранее использовался алгоритм PKCS7/CMS (OPENSSL_CIPHER_RC2_40 ).
|
8.0.0 |
certificate теперь принимает экземпляр OpenSSLCertificate;
ранее принимался ресурс (resource) типа OpenSSL X.509 CSR .
|
Пример #1 Пример использования openssl_pkcs7_encrypt()
<?php
// Сообщение, которое вы хотите зашифровать и отправить своему секретному
// агенту с позывным Козодой. У вас есть его сертификат в файле nighthawk.pem
$data = <<<EOD
Козодой,
Совершенно секретно! После прочтения сжечь!
Враги приближаются! Связной с новым поддельным паспортом
будет ждать тебя завтра в кафе в 8.30 утра.
Пароль - "У вас ус отклеился!"
Отзыв - "Это не ус, а борода!"
EOD;
// загружаем ключ
$key = file_get_contents("nighthawk.pem");
// записываем сообщение в файл
$fp = fopen("msg.txt", "w");
fwrite($fp, $data);
fclose($fp);
// шифруем
if (openssl_pkcs7_encrypt("msg.txt", "enc.txt", $key,
array("To" => "nighthawk@example.com", // ассоциативный синтаксис
"From: HQ <hq@example.com>", // индексированный синтаксис
"Subject" => "СРОЧНО!!! ВАЖНО!!!"))) {
// сообщение зашифровано - отправляем!!
exec(ini_get("sendmail_path") . " < enc.txt");
}
?>