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.

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.0certificate теперь принимает экземпляр 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");
}
?>
To Top