【PHP8.x】openssl_public_decrypt関数の使い方
openssl_public_decrypt
関数は、公開鍵暗号方式において、公開鍵を使用して暗号化されたデータを復号する関数です。この関数は、主にデジタル署名の検証処理で利用されます。デジタル署名では、送信者が秘密鍵でメッセージのハッシュ値に署名し、その署名されたデータを公開鍵を用いて復号することで、メッセージが確かに送信者によって署名されたものであること、およびメッセージが改ざんされていないことを検証します。
この関数は、以下の引数を受け取ります。第一引数には、復号する暗号化されたデータ(文字列)を指定します。第二引数には、復号されたデータが格納される変数(参照渡し)を指定します。第三引数には、使用する公開鍵を指定します。これは、OpenSSLキーリソースまたはPEM形式の公開鍵文字列である必要があります。第四引数には、パディング方式を指定し、通常はOPENSSL_PKCS1_PADDING
を使用します。
復号処理が成功した場合、この関数はtrue
を返し、復号されたデータは第二引数に渡された変数に格納されます。復号に失敗した場合はfalse
を返します。この関数は、一般的なデータの暗号化・復号とは異なり、公開鍵で暗号化されたデータを公開鍵で復号するという特殊な用途を持つため、利用する際はその目的を正しく理解することが重要です。これにより、データの完全性の確認や送信元の認証を行うセキュリティシステムを構築できます。
基本的な使い方
構文(syntax)
<?php
// 暗号化された文字列データ
$encryptedData = '...';
// 復号化されたデータが格納される変数(参照渡しのため事前に初期化)
$decryptedData = '';
// 公開鍵のPEM形式文字列、またはOpenSSLAsymmetricKeyリソース
// 通常はファイルから読み込むか、直接文字列として定義します
$publicKey = "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----";
// 公開鍵を使用してデータを復号化する
// 成功した場合はtrue、失敗した場合はfalseを返します
$success = openssl_public_decrypt($encryptedData, $decryptedData, $publicKey, OPENSSL_PKCS1_PADDING);
引数(parameters)
string $data, string &$decrypted_data, mixed $public_key, int $padding = OPENSSL_PKCS1_PADDING
- string $data: 復号化するデータを指定する文字列
- string &$decrypted_data: 復号化された結果が格納される文字列への参照
- mixed $public_key: 復号化に使用する公開鍵(PEM形式の文字列、またはOpenSSL X.509証明書リソース)
- int $padding = OPENSSL_PKCS1_PADDING: データのパディング方法を指定する整数(デフォルトはPKCS#1 v1.5)
戻り値(return)
bool
openssl_public_decrypt 関数は、公開鍵で暗号化されたデータを復号できた場合に true を返します。復号に失敗した場合は false を返します。