メッセージに署名する
コードサンプル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が返る。
最後に公開鍵のリソースを開放する。