【PHP8.x】openssl_decrypt()関数の使い方
openssl_decrypt関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
openssl_decrypt関数は、OpenSSLライブラリを使用してデータを復号化する関数です。暗号化されたデータを元の平文に戻すために使用されます。この関数は、指定された暗号化方式、キー、および初期化ベクトル(IV)(必要な場合)を使用して復号化を行います。
具体的には、暗号化された文字列、使用する暗号化アルゴリズム(例:'aes-256-cbc')、復号化に使用するキー、そして必要に応じて初期化ベクトル(IV)を引数として受け取ります。初期化ベクトルは、同じキーで繰り返し暗号化を行う際に、暗号化されたデータが同じにならないようにするために使用されます。
openssl_decrypt関数は、復号化に成功した場合は元の平文データを返し、失敗した場合は false を返します。復号化が失敗する原因としては、キーが間違っている、IVが間違っている、暗号化アルゴリズムが一致しない、暗号化されたデータが破損している、などが考えられます。
システムエンジニアがこの関数を使用する際には、以下の点に注意する必要があります。
- 暗号化に使用したアルゴリズムと全く同じアルゴリズムを復号化に使用する必要があります。
- 暗号化に使用したキーと全く同じキーを復号化に使用する必要があります。
- 暗号化に使用したIV(初期化ベクトル)と全く同じIVを復号化に使用する必要があります。
- キーとIVは安全な場所に保管し、適切に管理する必要があります。
- 復号化対象のデータが正しい形式であるか確認する必要があります。
openssl_decrypt関数を適切に使用することで、安全に暗号化されたデータを復号化し、元の情報を取得することができます。
構文(syntax)
1openssl_decrypt ( string $data , string $method , string $key , int $options = 0 , string $iv = "" , string $tag = "" , string $aad = "" ) : string|false
引数(parameters)
string $data, string $cipher_algo, string $passphrase, int $options = 0, string $iv = "", string $tag = "", string $aad = ""
- string $data: 復号化する暗号化済みのデータ
- string $cipher_algo: 使用する暗号化アルゴリズムの名前 (例: 'aes-256-cbc')
- string $passphrase: 復号化に使用するパスフレーズ(鍵)
- int $options = 0: 復号化のオプションを指定する整数 (デフォルトは0)
- string $iv = "": 初期化ベクトル。アルゴリズムによっては必要です (デフォルトは空文字列)
- string $tag = "": 認証タグ。AEADモードで使用されます (デフォルトは空文字列)
- string $aad = "": 追加認証データ。AEADモードで使用されます (デフォルトは空文字列)
戻り値(return)
string|false
openssl_decrypt()関数は、指定された暗号化されたデータと鍵を用いて復号処理を行います。処理が成功した場合は復号された文字列を、失敗した場合はfalseを返します。
サンプルコード
PHP openssl_decrypt エラー回避する
1<?php 2 3/** 4 * openssl_decrypt の使用例とエラーハンドリング 5 * 6 * @param string $encryptedData 暗号化されたデータ 7 * @param string $passphrase パスフレーズ 8 * @param string $cipherAlgorithm 暗号化アルゴリズム (例: aes-256-cbc) 9 * @param string $iv 初期化ベクトル 10 * 11 * @return string|null 復号化されたデータ、エラー時は null 12 */ 13function decryptData(string $encryptedData, string $passphrase, string $cipherAlgorithm, string $iv): ?string 14{ 15 try { 16 $decrypted = openssl_decrypt( 17 $encryptedData, 18 $cipherAlgorithm, 19 $passphrase, 20 OPENSSL_RAW_DATA, 21 $iv 22 ); 23 24 if ($decrypted === false) { 25 // openssl_decrypt が false を返した場合、エラーが発生 26 $errorMessage = openssl_error_string(); 27 error_log("OpenSSL decryption error: " . $errorMessage); 28 return null; 29 } 30 31 return $decrypted; 32 33 } catch (Exception $e) { 34 error_log("Exception during decryption: " . $e->getMessage()); 35 return null; 36 } 37} 38 39// 使用例 40$encryptedData = "your_encrypted_data_here"; // 実際の暗号化されたデータを設定 41$passphrase = "your_passphrase"; // 実際のパスフレーズを設定 42$cipherAlgorithm = "aes-256-cbc"; // 暗号化アルゴリズムを設定 43$iv = "your_initialization_vector"; // 初期化ベクトルを設定 44 45$decryptedData = decryptData($encryptedData, $passphrase, $cipherAlgorithm, $iv); 46 47if ($decryptedData !== null) { 48 echo "Decrypted data: " . $decryptedData . PHP_EOL; 49} else { 50 echo "Decryption failed." . PHP_EOL; 51}
openssl_decrypt関数は、PHPで暗号化されたデータを復号化するために使用します。この関数は、暗号化された文字列 $data、使用する暗号化アルゴリズム $cipher_algo、復号化に使用するパスフレーズ $passphrase を引数として受け取ります。オプションとして、$options で詳細な設定、$iv で初期化ベクトル、$tag で認証タグ、$aad で関連認証データを指定できます。
このサンプルコードでは、decryptData 関数内で openssl_decrypt を使用し、復号化処理を行っています。openssl_decrypt が false を返した場合、エラーが発生したことを意味します。この場合、openssl_error_string() 関数を使用して、OpenSSLのエラーメッセージを取得し、ログに出力します。これにより、デバッグが容易になります。
復号化が成功した場合、復号化されたデータが返されます。エラーが発生した場合は null が返されます。try-catch ブロックを使用することで、例外発生時にもエラーログを出力し、プログラムが予期せず終了するのを防ぎます。
使用例では、$encryptedData、$passphrase、$cipherAlgorithm、$iv に適切な値を設定し、decryptData 関数を呼び出しています。復号化されたデータがある場合は、画面に出力し、エラーが発生した場合はその旨を表示します。初期化ベクトル ($iv) は、暗号化時に使用したものと同じものを指定する必要があります。異なる $iv を使用すると、復号化に失敗します。
openssl_decrypt関数を使う際の注意点です。まず、openssl_decryptは失敗するとfalseを返すため、戻り値がfalseでないか確認が必要です。openssl_error_string()で詳細なエラーメッセージを取得できます。次に、暗号化アルゴリズム (cipher_algo)、パスフレーズ (passphrase)、初期化ベクトル (iv) は、暗号化時と復号化時で完全に一致させる必要があります。特にivは、安全な乱数生成関数で生成し、暗号化されたデータと一緒に安全に保管・伝送してください。OPENSSL_RAW_DATAオプションは、入力および出力データがBase64エンコードされていないことを意味します。パスフレーズは推測されにくい強固なものを選びましょう。
PHP openssl_decryptで復号化する
1<?php 2 3/** 4 * openssl_decrypt 関数の使用例を示します。 5 * 暗号化されたデータを復号化する処理と、復号化に失敗して false が返されるケースをデモンストレーションします。 6 * 7 * システムエンジニアを目指す初心者の方にも理解しやすいように、基本的な暗号化から復号化、 8 * そしてエラーハンドリングまでをカバーしています。 9 */ 10function demonstrateOpensslDecrypt(): void 11{ 12 echo "--- openssl_decrypt のデモンストレーションを開始します ---" . PHP_EOL . PHP_EOL; 13 14 // 1. 暗号化に必要な情報を定義 15 $plaintext = 'この機密情報は安全に保護されるべきデータです。'; // 元の平文データ 16 $passphrase = 'MyStrongAndSecretKey123!@#'; // 暗号化/復号化に使うパスフレーズ (秘密鍵) 17 $cipherAlgo = 'aes-256-gcm'; // 使用する暗号アルゴリズム (認証付き暗号化モード) 18 19 // OpenSSL 拡張が利用可能かチェック 20 if (!extension_loaded('openssl')) { 21 echo "エラー: PHP OpenSSL 拡張が有効になっていません。" . PHP_EOL; 22 echo "php.ini で 'extension=openssl' を有効にしてください。" . PHP_EOL; 23 return; 24 } 25 26 // IV (Initialization Vector) の長さを取得し、ランダムなIVを生成 27 // IVは暗号化ごとにユニークである必要があります。 28 $ivLength = openssl_cipher_iv_length($cipherAlgo); 29 if ($ivLength === false) { 30 echo "エラー: IVの長さを取得できませんでした。暗号アルゴリズムを確認してください。" . PHP_EOL; 31 return; 32 } 33 $iv = openssl_random_pseudo_bytes($ivLength); // 強力な乱数でIVを生成 34 35 // 2. データの暗号化 36 // GCM (Galois/Counter Mode) のような認証付き暗号化モードでは、 37 // openssl_encrypt は参照渡しで認証タグ ($tag) を返します。 38 $tag = null; // 認証タグを格納するための変数 39 $encryptedData = openssl_encrypt( 40 $plaintext, 41 $cipherAlgo, 42 $passphrase, 43 OPENSSL_RAW_DATA, // 戻り値を生データ形式にするオプション 44 $iv, 45 $tag, // 認証タグは参照渡しで受け取る 46 '' // AAD (追加認証データ) は今回は使用しません 47 ); 48 49 if ($encryptedData === false) { 50 echo "エラー: データの暗号化に失敗しました。OpenSSLエラー: " . openssl_error_string() . PHP_EOL; 51 return; 52 } 53 54 echo "--- 暗号化成功 ---" . PHP_EOL; 55 echo "平文データ: " . $plaintext . PHP_EOL; 56 echo "暗号化データ (Base64エンコード): " . base64_encode($encryptedData) . PHP_EOL; 57 echo "IV (Base64エンコード): " . base64_encode($iv) . PHP_EOL; 58 echo "認証タグ (Base64エンコード): " . base64_encode($tag) . PHP_EOL; 59 echo PHP_EOL; 60 61 // --- 3. 正常な復号化の例 --- 62 echo "--- 正常な復号化を試行します ---" . PHP_EOL; 63 $decryptedData = openssl_decrypt( 64 $encryptedData, 65 $cipherAlgo, 66 $passphrase, 67 OPENSSL_RAW_DATA, 68 $iv, 69 $tag 70 ); 71 72 if ($decryptedData === false) { 73 echo "エラー: 正常な復号化に失敗しました (これは予期せぬエラーです)。" . PHP_EOL; 74 // openssl_error_string() は直近のOpenSSLエラーメッセージを返します 75 while ($msg = openssl_error_string()) { 76 echo "OpenSSLエラー詳細: " . $msg . PHP_EOL; 77 } 78 } else { 79 echo "復号化成功!: " . $decryptedData . PHP_EOL; 80 if ($decryptedData === $plaintext) { 81 echo "元の平文データと完全に一致しました。" . PHP_EOL; 82 } else { 83 echo "警告: 復号化されたデータが元の平文と一致しません。" . PHP_EOL; 84 } 85 } 86 echo PHP_EOL; 87 88 // --- 4. 復号化に失敗する例 (false が返るケース 1): 誤ったパスフレーズ --- 89 echo "--- 失敗する復号化を試行します (誤ったパスフレーズを使用) ---" . PHP_EOL; 90 $wrongPassphrase = 'incorrect_secret_key'; // わざと間違ったパスフレーズを使用 91 $decryptedDataWrongPass = openssl_decrypt( 92 $encryptedData, 93 $cipherAlgo, 94 $wrongPassphrase, // ここで誤ったパスフレーズを渡す 95 OPENSSL_RAW_DATA, 96 $iv, 97 $tag 98 ); 99 100 if ($decryptedDataWrongPass === false) { 101 echo "復号化失敗! (期待通り): 誤ったパスフレーズのため、復号化できませんでした。" . PHP_EOL; 102 while ($msg = openssl_error_string()) { 103 echo "OpenSSLエラー詳細: " . $msg . PHP_EOL; 104 } 105 } else { 106 echo "警告: 誤ったパスフレーズでデータが復号化されました。これはセキュリティ上の問題です!" . PHP_EOL; 107 echo "復号化されたデータ: " . $decryptedDataWrongPass . PHP_EOL; 108 } 109 echo PHP_EOL; 110 111 // --- 5. 復号化に失敗する例 (false が返るケース 2): 認証タグの不一致 (データの改ざん検知) --- 112 // GCMモードなどの認証付き暗号化アルゴリズムを使用している場合にのみ機能します。 113 echo "--- 失敗する復号化を試行します (認証タグを故意に改ざん) ---" . PHP_EOL; 114 $manipulatedTag = $tag . 'X'; // 認証タグを故意に少し変更して改ざんをシミュレート 115 116 // 暗号アルゴリズムがGCMモードであることを確認 (認証タグを使用するため) 117 if (str_ends_with($cipherAlgo, '-gcm')) { 118 $decryptedDataManipulatedTag = openssl_decrypt( 119 $encryptedData, 120 $cipherAlgo, 121 $passphrase, 122 OPENSSL_RAW_DATA, 123 $iv, 124 $manipulatedTag // 改ざんされたタグを渡す 125 ); 126 127 if ($decryptedDataManipulatedTag === false) { 128 echo "復号化失敗! (期待通り): 認証タグの不一致により、データの改ざんが検知されました。" . PHP_EOL; 129 while ($msg = openssl_error_string()) { 130 echo "OpenSSLエラー詳細: " . $msg . PHP_EOL; 131 } 132 } else { 133 echo "警告: 認証タグが改ざんされているにも関わらず復号化されました。これはセキュリティ上の問題です!" . PHP_EOL; 134 echo "復号化されたデータ: " . $decryptedDataManipulatedTag . PHP_EOL; 135 } 136 } else { 137 echo "現在の暗号アルゴリズム ('" . $cipherAlgo . "') は認証タグを使用しないため、このテストはスキップします。" . PHP_EOL; 138 } 139 echo PHP_EOL; 140 141 echo "--- openssl_decrypt のデモンストレーションを終了します ---" . PHP_EOL; 142} 143 144// デモンストレーション関数を実行 145demonstrateOpensslDecrypt();
PHPのopenssl_decrypt関数は、openssl_encrypt関数で暗号化されたデータを、元の平文データに戻す(復号化する)ために使用されます。機密情報を安全に保管し、必要に応じて内容を読み出す処理において不可欠な役割を担います。
この関数は、復号化したい暗号データ($data)、暗号化時に使用したアルゴリズム($cipher_algo)、パスフレーズ($passphrase)、初期化ベクトル($iv)を引数として受け取ります。特にaes-256-gcmのような認証付き暗号化アルゴリズムを使用する際は、データの改ざんを検知するための認証タグ($tag)も渡す必要があります。これらの情報は暗号化時と完全に一致している必要があります。
復号化が成功すると、元の平文データが文字列として返されます。しかし、渡されたパスフレーズが間違っている場合や、認証タグが一致しない(データが改ざんされた可能性が高い)場合など、復号化に失敗した際にはfalseが返されます。これは、不正なアクセスやデータの改ざんから情報を保護するための重要なセキュリティ機能です。falseが返された場合、openssl_error_string()関数で詳細なエラー情報を確認し、適切なエラーハンドリングを行うことが推奨されます。この関数はPHP 8で利用でき、PHPにOpenSSL拡張がインストールされ有効になっている必要があります。
openssl_decrypt関数は、暗号化されたデータを元の形に戻すために使われます。復号化に失敗した場合はfalseを返すため、必ず戻り値をチェックし、エラー発生時はopenssl_error_string()で詳細な原因を確認する習慣をつけてください。特に、暗号化時と全く同じパスフレーズ、暗号アルゴリズム、IV(初期化ベクトル)、そして認証タグ(GCMなどのモード使用時)が指定されている必要があります。これらが一つでも異なると復号化は失敗し、特に認証タグの不一致はデータの改ざんを検知して安全に処理を停止するため、セキュリティ上非常に重要です。この関数を利用するにはPHPのOpenSSL拡張が有効になっている必要があります。
openssl_decryptでデータを復号化する
1<?php 2 3/** 4 * openssl_decrypt の使用例。 5 * 暗号化されたデータを復号化します。 6 * 7 * openssl_decrypt が期待通りに動作しない場合、以下の点を確認してください。 8 * 1. 暗号化に使用した cipher_algo と同じものを指定しているか。 9 * 2. 暗号化に使用した passphrase と同じものを指定しているか。 10 * 3. 暗号化に使用した IV (初期化ベクトル) と同じものを指定しているか。 11 * 4. openssl_encrypt で使用した options と同じものを指定しているか。 12 * 5. openssl_encrypt で使用した tag と aad を指定しているか(必要な場合)。 13 */ 14function decrypt_data(string $data, string $cipher_algo, string $passphrase, string $iv = "", string $tag = "", string $aad = ""): string|false 15{ 16 // options はデフォルト値の 0 を使用します。 17 $options = 0; 18 19 // 復号化を実行します。 20 $decrypted = openssl_decrypt($data, $cipher_algo, $passphrase, $options, $iv, $tag, $aad); 21 22 // 復号化が成功した場合は結果を、失敗した場合は false を返します。 23 return $decrypted; 24} 25 26// サンプルの暗号化されたデータ、cipher_algo、passphrase、IV を定義します。 27// 実際には、これらの値は暗号化時に使用したものと同じである必要があります。 28$encrypted_data = "your_encrypted_data_here"; // 暗号化された文字列 29$cipher_algo = "aes-256-cbc"; // 暗号化アルゴリズム 30$passphrase = "your_secret_passphrase"; // パスフレーズ 31$iv = "your_initialization_vector"; // 初期化ベクトル (16バイト) 32 33// 復号化を実行します。 34$decrypted_data = decrypt_data($encrypted_data, $cipher_algo, $passphrase, $iv); 35 36// 復号化の結果を表示します。 37if ($decrypted_data !== false) { 38 echo "復号化されたデータ: " . $decrypted_data . PHP_EOL; 39} else { 40 echo "復号化に失敗しました。" . PHP_EOL; 41} 42 43?>
openssl_decrypt関数は、暗号化されたデータを復号化するための関数です。引数として、復号化する文字列 $data、暗号化アルゴリズム $cipher_algo、パスフレーズ $passphrase を必須で指定します。オプションで、$options (通常は0)、初期化ベクトル $iv、認証タグ $tag、追加認証データ $aad を指定できます。
この関数が期待通りに動作しない場合は、以下の点を確認してください。暗号化に使用した $cipher_algo、$passphrase、$iv と同じものを指定しているか、openssl_encrypt で使用した $options、$tag、$aad を指定する必要があるかを確認してください。特に初期化ベクトル $iv は、暗号化時と同じ値を指定する必要があります。
関数が成功した場合、復号化された文字列を返します。失敗した場合は false を返します。サンプルコードでは、decrypt_data 関数を定義し、openssl_decrypt を使用して $encrypted_data を復号化しています。復号化が成功した場合は復号化されたデータを、失敗した場合はエラーメッセージを表示します。
openssl_decrypt関数を使う際の注意点です。まず、暗号化時と全く同じ暗号化アルゴリズム($cipher_algo)、パスフレーズ($passphrase)、初期化ベクトル($iv)を使用する必要があります。これらが異なると復号化に失敗します。次に、暗号化時にopenssl_encryptで指定したオプション($options)、認証タグ($tag)、追加認証データ($aad)も、復号化時に同じ値を指定する必要があります。特に初期化ベクトルは、アルゴリズムによっては必須であり、正しい長さを設定してください。サンプルコードでは、これらの変数を適切に設定するように促しています。復号化に失敗した場合はfalseが返るので、必ずエラーハンドリングを行いましょう。
PHP openssl_decryptでデータを復号する
1<?php 2 3/** 4 * openssl_decrypt 関数の基本的な使用例。 5 * 6 * 暗号化されたデータを復号するために、openssl_decrypt 関数を使用します。 7 * この例では、まず openssl_encrypt を使用してデータを暗号化し、 8 * その後 openssl_decrypt で復号する一連の流れを示します。 9 * システムエンジニアを目指す初心者向けに、各ステップで何をしているかをコメントで説明しています。 10 */ 11function opensslDecryptExample(): void 12{ 13 // --- 1. 暗号化と復号に必要なパラメータを定義 --- 14 // 暗号化アルゴリズム。ここではAES-256-CBCを使用。 15 // openssl_get_cipher_methods() で利用可能なアルゴリズムを確認できます。 16 $cipher_algo = 'aes-256-cbc'; 17 18 // 秘密のパスフレーズ(鍵)。セキュリティのため、強力で予測困難な文字列を使用してください。 19 // このパスフレーズは暗号化と復号の両方で同じものを使う必要があります。 20 $passphrase = 'your_strong_and_secret_passphrase_here'; 21 22 // IV (Initialization Vector) の長さを取得します。 23 // IVは暗号化のたびにユニークであるべきで、暗号化データと一緒に保存または転送されます。 24 $iv_length = openssl_cipher_iv_length($cipher_algo); 25 if ($iv_length === false) { 26 echo "エラー: 暗号アルゴリズム '{$cipher_algo}' のIV長を取得できませんでした。\n"; 27 return; 28 } 29 30 // ランダムなIVを生成します。 31 // openssl_random_pseudo_bytes() は暗号学的に安全なランダムバイトを生成します。 32 $iv = openssl_random_pseudo_bytes($iv_length); 33 if ($iv === false) { 34 echo "エラー: IVの生成に失敗しました。\n"; 35 return; 36 } 37 38 // --- 2. 暗号化する元のデータ --- 39 $original_data = 'これはオンラインシステムで保護すべき秘密のメッセージです。'; 40 echo "元のデータ: " . $original_data . "\n\n"; 41 42 // --- 3. データの暗号化 (openssl_encrypt の使用) --- 43 // openssl_decrypt を使用するには、まず暗号化されたデータが必要です。 44 // ここでは openssl_encrypt を使って、その暗号化データを作成します。 45 // 第4引数の `0` はオプションで、通常はそのまま使用します。 46 $encrypted_data = openssl_encrypt( 47 $original_data, 48 $cipher_algo, 49 $passphrase, 50 0, // オプションビットマスク 51 $iv 52 ); 53 54 if ($encrypted_data === false) { 55 echo "エラー: データの暗号化に失敗しました。\n"; 56 // 失敗した場合、openssl_error_string() で詳細なエラー情報を確認できます。 57 // echo "OpenSSLエラー: " . openssl_error_string() . "\n"; 58 return; 59 } 60 61 // 暗号化されたデータはバイナリデータなので、表示のためにBase64エンコードします。 62 // 実際のシステムでは、そのまま保存または転送することが多いです。 63 echo "暗号化されたデータ (Base64エンコード): " . base64_encode($encrypted_data) . "\n"; 64 echo "使用したIV (Base64エンコード): " . base64_encode($iv) . "\n\n"; 65 66 // --- 4. データの復号 (openssl_decrypt の使用) --- 67 // 暗号化されたデータ ($encrypted_data) を復号します。 68 // 暗号化時と全く同じアルゴリズム、パスフレーズ、IVを使用する必要があります。 69 // 1つでも異なると正しく復号できません。 70 // $tag と $aad は、GCM/CCMモードなどの認証付き暗号で必要となる引数ですが、 71 // CBCモードでは使用しないため、デフォルト値(空文字列)のままで問題ありません。 72 $decrypted_data = openssl_decrypt( 73 $encrypted_data, // 復号する暗号化データ 74 $cipher_algo, // 暗号アルゴリズム 75 $passphrase, // パスフレーズ 76 0, // オプションビットマスク 77 $iv // 初期化ベクトル (IV) 78 ); 79 80 if ($decrypted_data === false) { 81 echo "エラー: データの復号に失敗しました。パスフレーズまたはIVを確認してください。\n"; 82 // 失敗した場合、openssl_error_string() で詳細なエラー情報を確認できます。 83 // echo "OpenSSLエラー: " . openssl_error_string() . "\n"; 84 } else { 85 echo "復号されたデータ: " . $decrypted_data . "\n\n"; 86 87 // 元のデータと復号されたデータが一致するか確認します。 88 if ($original_data === $decrypted_data) { 89 echo "復号成功: 元のデータと復号されたデータは一致します。\n"; 90 } else { 91 echo "復号失敗: 元のデータと復号されたデータは一致しません。\n"; 92 } 93 } 94} 95 96// 関数を実行して、サンプルコードの動作を確認します。 97opensslDecryptExample(); 98
PHPのopenssl_decrypt関数は、暗号化されたデータを元の状態に復号するために使用される重要な関数です。システムエンジニアを目指す初心者にとって、データの安全な取り扱いは必須であり、この関数は情報セキュリティを実装する上で中心的な役割を担います。
この関数は、復号したい暗号化データである$data、暗号化時に用いた$cipher_algo(暗号アルゴリズム)、秘密の$passphrase(鍵)、そして$iv(初期化ベクトル)を引数として受け取ります。$optionsは追加のオプションを指定するビットマスクで、通常は0が使われます。$tagと$aadは、GCM/CCMモードのような認証付き暗号で必要となるオプション引数です。これら、特にアルゴリズム、パスフレーズ、IVは暗号化時と完全に一致している必要があり、一つでも異なると正しく復号できません。
サンプルコードでは、まずopenssl_encryptを使ってデータを暗号化し、その暗号化されたデータと、暗号化に用いたパスフレーズやIVをopenssl_decryptに渡して復号しています。復号が成功すると元の文字列が戻り値として返され、失敗した場合はfalseが返されます。セキュリティ確保のため、パスフレーズは強力で秘密に保ち、IVは毎回ユニークなものを生成して使用することが重要です。復号後には、元のデータと復号されたデータが一致するかを確認し、処理の成功を検証しています。
openssl_decrypt関数を利用する際は、暗号化時と全く同じアルゴリズム、パスフレーズ、初期化ベクトル(IV)を使用しないと正しく復号できませんのでご注意ください。特にパスフレーズは予測困難な強力な文字列を選び、厳重に管理することが重要です。IVは暗号化のたびにopenssl_random_pseudo_bytes()で安全に生成し、暗号化データと共に保存または転送する必要があります。復号が失敗した場合(falseが返る場合)は、パスフレーズやIVの不一致、またはデータ破損が考えられますので、必ず戻り値を確認し、適切にエラーハンドリングを行ってください。GCM/CCMモードのような認証付き暗号を使用しない限り、$tagと$aad引数は空のままで問題ありません。暗号化されたバイナリデータは、データベースやファイルに保存する際にBase64エンコードすると扱いやすくなります。