関数の概要
openssl_encrypt は、PHPで文字列を暗号化するための関数です。OpenSSLライブラリを利用しており、安全な暗号化アルゴリズムを簡単に使うことができます。データのセキュリティ確保や通信の暗号化、パスワード保護など、幅広い用途に対応しています。
パラメータの説明
data(string): 暗号化したい元の文字列。method(string): 使用する暗号化アルゴリズム。例として “AES-128-CBC” など。password(string): 暗号化キーとなる文字列。options(int): オプションフラグ。通常は0で問題ありません。OPENSSL_RAW_DATAやOPENSSL_ZERO_PADDINGが指定可能。iv(string): 初期化ベクトル(Initialization Vector)。アルゴリズムによって必須です。暗号化の安全性を高めます。$tag(string): GCMモードなどで使う場合に認証タグを格納する変数(省略可能)。$aad(string): GCMモードの追加認証データ(オプション)。$tag_length(int): 認証タグの長さ(省略可能)。
戻り値
暗号化に成功すると、暗号化された文字列を返します。optionsにOPENSSL_RAW_DATAを指定しない場合はBase64エンコードされた文字列が返ります。失敗した場合は false を返します。
使用例
基本的な使い方
<?php
$data = "秘密のメッセージ";
$method = "AES-128-CBC";
$key = "1234567890abcdef";
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method));
$encrypted = openssl_encrypt($data, $method, $key, 0, $iv);
echo "暗号化されたデータ: " . $encrypted;
?>
この例では「AES-128-CBC」方式を使い、鍵と初期化ベクトル(iv)を用いて文字列を暗号化しています。結果はBase64形式で出力されます。
オプション OPENSSL_RAW_DATA を使用した例
<?php
$data = "重要な情報";
$method = "AES-256-CBC";
$key = "これは非常に長い秘密鍵です1234567890123456";
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method));
$encrypted = openssl_encrypt($data, $method, $key, OPENSSL_RAW_DATA, $iv);
echo "暗号化された生データ: " . bin2hex($encrypted);
?>
OPENSSL_RAW_DATAを指定するとBase64エンコードされず、生のバイナリデータが返されます。そのままだと表示不可なのでbin2hexで16進数に変換して表示しています。
復号化と組み合わせて使う例
<?php
$method = "AES-128-CBC";
$key = "mysecretkey12345";
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method));
$original = "decrypt me";
// 暗号化
$encrypted = openssl_encrypt($original, $method, $key, 0, $iv);
// 復号化
$decrypted = openssl_decrypt($encrypted, $method, $key, 0, $iv);
echo "元の文字列: " . $original . "n";
echo "復号化された文字列: " . $decrypted . "n";
?>
暗号化したデータを同じ方法で復号化することで元の文字列を取り出せます。openssl_decrypt 関数とセットで使うことが多いです。
関連する関数
openssl_decrypt: openssl_encryptで暗号化した文字列を復号化するopenssl_cipher_iv_length: 指定した暗号化アルゴリズムの初期化ベクトル(iv)の長さを取得するopenssl_random_pseudo_bytes: 暗号化に使う安全なランダムなバイト列を生成する
まとめ
openssl_encryptはPHPで安全に文字列を暗号化するための強力な関数です。正しいアルゴリズムと適切な初期化ベクトルを使えば実務でも十分なセキュリティを確保できます。復号化には対応するopenssl_decryptを使い、暗号化と復号化のペアで活用してください。初心者でもサンプルコードを参考にすれば簡単に利用可能です。
