php 公開鍵暗号で暗号化と復号化

// 暗号化したい文字列
$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言語開発者の名残りみたいなものがあるのかな。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です