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

作成日: 更新日:

openssl_cms_encrypt関数は、OpenSSL拡張の一部として、Cryptographic Message Syntax(CMS)形式でデータを暗号化するために使用される関数です。

この関数は、指定された入力データ(ファイルまたは文字列)を、一人以上の受信者の公開鍵証明書を用いて暗号化します。これにより、暗号化されたデータは、対応する秘密鍵を持つ正規の受信者のみが復号できる状態となり、データの機密性(秘匿性)を確保できます。

さらに、オプションとして送信者の秘密鍵と証明書を提供することで、暗号化と同時にデジタル署名を適用することも可能です。デジタル署名は、データの改ざんを検知し、送信者の身元を証明するために利用され、データの完全性と真正性を向上させます。

暗号化されたデータは通常、DER形式またはPEM形式のCMS構造として指定された出力ファイルに保存されます。この関数は、セキュアなファイル配布システム、機密性の高い情報交換、あるいはセキュアな電子メール通信など、高度なセキュリティ要件を持つアプリケーションにおいて重要な役割を果たします。利用にあたっては、適切な公開鍵証明書の管理と、秘密鍵の厳重な保護が不可欠です。

基本的な使い方

構文(syntax)

openssl_cms_encrypt(string $input_filename, string $output_filename, mixed $certificate, array $headers, int $flags = 0, int $encoding = OPENSSL_ENCODING_SMIME): bool

引数(parameters)

string $input_filename, string $output_filename, mixed $certificate, mixed $headers, int $flags = 0, int $encoding = OPENSSL_ENCODING_SMIME, int $cipher_algo = OPENSSL_CIPHER_AES128_GCM

  • string $input_filename: 暗号化する元のファイル名を指定します
  • string $output_filename: 暗号化されたファイルを保存するファイル名を指定します
  • mixed $certificate: 受信者の公開鍵証明書を指定します。PEM形式の文字列またはファイルパスを指定できます
  • mixed $headers: CMSヘッダーを指定します。配列形式で、'subject'、'issuer'、'serialNumber'、'url'などのキーを持つことができます
  • int $flags = 0: 暗号化のフラグを指定します。例えば、OPENSSL_CMS_SIGNは署名を追加する場合に使用します
  • int $encoding = OPENSSL_ENCODING_SMIME: 出力ファイルのエンコーディングを指定します。デフォルトはSMIME形式です
  • int $cipher_algo = OPENSSL_CIPHER_AES128_GCM: 使用する対称暗号アルゴリズムを指定します。デフォルトはAES128_GCMです

戻り値(return)

string|false

openssl_cms_encrypt 関数は、指定されたデータと証明書を使用して CMS (Cryptographic Message Syntax) 形式の暗号化されたメッセージを生成し、その結果を文字列として返します。処理が失敗した場合は false を返します。

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