// 暗号化したい文字列
$msg = "こんにちは";
// 秘密鍵作成
$private = openssl_pkey_new();
// 公開鍵抽出
$public_key = openssl_pkey_get_details($private)['key'];
// 公開鍵で暗号化
openssl_public_encrypt($msg, $crypted, $public_key);
// 秘密鍵で復号化
openssl_private_decrypt($crypted, $decrypted, $private);
dump($decrypted); // "こんにちは"と表示される
秘密鍵の抽出方法
openssl_pkey_new()の戻り値は、OpenSSLAsymmetricKeyクラスのインスタンスが返ってくるので、秘密鍵を文字列で取得したい場合は、openssl_pkey_export()を使用する。
// 秘密鍵作成
$private = openssl_pkey_new();
// 秘密鍵を文字列で取得
openssl_pkey_export($private, $private_key);
openssl_pkey_new()で作成したOpenSSLAsymmetricKeyクラスのインスタンスをopenssl_pkey_export()の第1パラメータに指定し、秘密鍵の文字列を入れてほしい変数を第2パラメータに指定する。
phpには珍しい参照渡しになっていて、戻り値に秘密鍵の文字列を返してくれたらいいのにって思うけど、C言語開発者の名残りみたいなものがあるのかな。