(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 или массив 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");
}
?>