(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");
}
?>