openssl_pkcs7_encrypt

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

openssl_pkcs7_encryptШифрует сообщение по стандарту S/MIME

Описание

openssl_pkcs7_encrypt(
    string $input_filename,
    string $output_filename,
    OpenSSLCertificate|array|string $certificate,
    ?array $headers,
    int $flags = 0,
    int $cipher_algo = OPENSSL_CIPHER_AES_128_CBC
): bool

Функция 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");
}


?>