【PHP8.x】openssl_pkcs7_encrypt関数の使い方

作成日: 更新日:

openssl_pkcs7_encrypt関数は、データをPKCS7形式で暗号化し、必要に応じてデジタル署名を付与する関数です。この関数は、データの機密性(内容を秘密にすること)と完全性(改ざんされていないこと)を同時に確保するためのセキュアなデータ交換プロトコルであるPKCS7の形式に従って処理を行います。

具体的には、入力されたデータを、指定された受信者の公開鍵証明書を用いて暗号化します。これにより、暗号化されたデータは、対応する秘密鍵を持つ正規の受信者のみが復号し、内容を安全に閲覧できるようになります。不正なアクセスからデータを保護するために重要な機能です。

さらに、オプションとして送信者の秘密鍵と証明書を指定することで、暗号化されたデータにデジタル署名を付与することも可能です。このデジタル署名は、データが確かに指定された送信者によって作成されたものであり、転送中に一切改ざんされていないことを保証します。

この関数は、主にセキュアな電子メール通信(S/MIMEなど)や、信頼性の高いデータのやり取りが必要なシステムで利用されます。関数を使用する際には、暗号化したいデータ、受信者の公開鍵証明書、出力ファイルパスなどを引数として指定します。処理が成功した場合はtrueを、失敗した場合はfalseを返します。PHPのOpenSSL拡張が有効になっている環境で利用可能です。

基本的な使い方

構文(syntax)

<?php
$result = openssl_pkcs7_encrypt(
    'path/to/input.txt',                               // 入力ファイルのパス (string)
    'path/to/output.p7m',                              // 出力ファイルのパス (string)
    'file:///path/to/recipient_certificate.pem',       // 受信者の証明書 (mixed: ファイルパス、文字列、リソース)
    ['file:///path/to/sender_private_key.pem', 'your_private_key_password'], // 送信者の秘密鍵とパスフレーズ (mixed: 配列、ファイルパス、文字列、リソース)
    [],                                                // オプション: ヘッダ (array)
    0,                                                 // オプション: フラグ (int)
    OPENSSL_CIPHER_AES256_CBC                          // オプション: 暗号化アルゴリズム (int)
);
?>

引数(parameters)

string $input_filename, string $output_filename, OpenSSLCertificate|array|string $certificate, array|string $headers, int $flags = 0, int $cipher_algo = OPENSSL_CIPHER_AES128_CBC

  • string $input_filename: 暗号化する元となるファイル名を指定します。
  • string $output_filename: 暗号化されたデータを保存するファイル名を指定します。
  • OpenSSLCertificate|array|string $certificate: 暗号化に使用する公開鍵証明書を指定します。OpenSSLCertificateオブジェクト、証明書のファイルパス、または証明書の内容を表す文字列で指定できます。
  • array|string $headers: PKCS#7メッセージのヘッダー情報を指定します。配列または文字列で指定できます。
  • int $flags = 0: 暗号化の動作を制御するフラグを指定します。デフォルトは0です。
  • int $cipher_algo = OPENSSL_CIPHER_AES128_CBC: 暗号化に使用するアルゴリズムを指定します。デフォルトはAES128_CBCです。

戻り値(return)

bool

openssl_pkcs7_encrypt 関数は、PKCS#7 形式でデータを暗号化することに成功したかどうかを示す真偽値 (bool) を返します。成功した場合は true、失敗した場合は false を返します。

【PHP8.x】openssl_pkcs7_encrypt関数の使い方 | いっしー@Webエンジニア