S/MIME メッセージを暗号化する

# openssl_pkcs7_encrypt

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

openssl_pkcs7_encrypt — S/MIME メッセージを暗号化する

### 説明

function 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` という名前のファイルの内容を RC2 40 ビット暗号により暗号化します。この内容は、 `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 クラスのインスタンスを受け入れるようになりました。 これより前のバージョンでは、 `OpenSSL X.509 CSR` 型のリソースを受け入れていました。

### 例

例1 openssl_pkcs7_encrypt() の例

    <?php
    // 暗号化するメッセージを nighthawk という名前の外部の秘密の
    // エージェントに送信します。送信先の証明書をファイル nighthawk.pem に
    // 有しています。
    $data = <<<EOD
    Nighthawk,

    Top secret, for your eyes only!

    The enemy is closing in! Meet me at the cafe at 8.30am
    to collect your forged passport!

    HQ
    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" => "Eyes only"))) {
        // メッセージを暗号化し、送信します!
        exec(ini_get("sendmail_path") . " < enc.txt");
    }
    ?>

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open