openssl_pkcs7_encrypt

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

openssl_pkcs7_encryptS/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 という名前のファイルの内容を 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");
}
?>

関連キーワード:  暗号, メッセージ, encrypt, filename, certificate, ヘッダ, 配列, バージョン, algo, flags