そのまんま!

openssl_pkcs7_encrypt

(PHP 4 >= 4.0.6, PHP 5)

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

説明

bool openssl_pkcs7_encrypt ( string infile, string outfile, mixed recipcerts, array headers [, int flags [, int cipherid]] )

openssl_pkcs7_encrypt() は、 infile という名前のファイルの内容を RC2 40 ビット暗号により暗号化します。この内容は、 recipcerts で指定した意図する受信者によってのみ 読むことが可能です。recipcerts は、 X.509 証明書または X.509 証明書の配列です。 headers は、暗号化された後にデータの前に 付加されるヘッダの配列です。flags は オプションとして使用可能であり、エンコード処理を変更するために 指定されます。PKCS7 定数を 参照ください。headers はヘッダ名をキーとする 連想配列または添字配列であり、各要素には、各ヘッダ行が一行ずつ 含まれています。 PHP 5 以降、cipherid で暗号を選択可能です。

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