PHP: メッセージに署名する、署名を確認する

Pocket

メッセージに署名する

コードサンプル1:


$message = 'message';
// 秘密鍵を設定
$pri_key_id = openssl_get_privatekey($private_key);
// 秘密鍵を使って署名
openssl_sign($message, $signature, $pri_key_id, OPENSSL_ALGO_MD5);
// 秘密鍵を解放
openssl_free_key($pri_key_id);

メッセージに署名するには、まずopenssl_get_privatekey関数で秘密鍵を設定する。
openssl_get_privatekey関数の引数は鍵へのファイルパスまたはPEM形式の文字列を受け取る。
上記の例で$private_keyにRSA秘密鍵を文字列で渡す場合、その中身は次のように-----BEGIN RSA PRIVATE KEY-----から始まる文字列である。

-----BEGIN RSA PRIVATE KEY-----
... 省略 ...
-----END RSA PRIVATE KEY-----

次に、openssl_sign関数で署名する。第二引数に署名データが参照渡しで返ってくる。
最後に秘密鍵のリソースを開放する。

署名を確認する

コードサンプル2:


$signature = '...'; // コードサンプル1で得た署名データ
$message = 'message';
// 公開鍵を設定
$pub_key_id = openssl_get_publickey($public_key);
// 公開鍵で署名を確認
$result = openssl_verify($message, $signature, $pub_key_id, OPENSSL_ALGO_MD5);
// 公開鍵を解放
openssl_free_key($pub_key_id);

メッセージの署名を確認するには、まずopenssl_get_privatekey関数で公開鍵を設定する。
上記の例で$public_keyにRSA公開鍵を文字列で渡す場合、その中身は次のように-----BEGIN PUBLIC KEY-----から始まる文字列である。-----BEGIN RSA PUBLIC KEY-----ではないので注意。

-----BEGIN PUBLIC KEY-----
... 省略 ...
-----END PUBLIC KEY-----

次にopenssl_verify関数で署名を確認する。署名が正しい場合にはtrue,正しくない場合にはfalseが返る。
最後に公開鍵のリソースを開放する。

コメントを残す

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