openssl_sign

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

openssl_sign署名を生成する

説明

openssl_sign(
    string $data,
    string &$signature,
    OpenSSLAsymmetricKey|OpenSSLCertificate|array|string $private_key,
    string|int $algorithm = OPENSSL_ALGO_SHA1
): bool

openssl_sign() は、指定した data の署名を作ります。 private_key で指定した秘密鍵を使用して、暗号のデジタル署名を生成します。 data 自体は暗号化されないことに注意してください。

パラメータ

data

署名したいデータの文字列。

signature

成功した場合、署名が signature に格納されます。

private_key

OpenSSLAsymmetricKey - openssl_get_privatekey() が返す鍵。

string - PEM フォーマットの鍵。

algorithm

int - いずれかの 署名アルゴリズム

string - openssl_get_md_methods() が返す文字列 ("sha256WithRSAEncryption" や "sha384" など)。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン 説明
8.0.0 private_key は、 OpenSSLAsymmetricKey または OpenSSLCertificate クラスのインスタンスを受け入れるようになりました。 これより前のバージョンでは、 OpenSSL key または OpenSSL X.509 型のリソースを受け入れていました。

例1 openssl_sign() の例

<?php
// $data に署名するデータが含まれていると仮定

// ファイルから秘密鍵を取得して準備
$pkeyid openssl_pkey_get_private("file://src/openssl-0.9.6/demos/sign/key.pem");

// 署名を計算
openssl_sign($data$signature$pkeyid);

// メモリからキーを開放する
openssl_free_key($pkeyid);
?>

例2 openssl_sign() の例

<?php
// 署名したいデータ
$data 'my data';

// 新しい秘密鍵と公開鍵を作成
$new_key_pair openssl_pkey_new(array(
    
"private_key_bits" => 2048,
    
"private_key_type" => OPENSSL_KEYTYPE_RSA,
));
openssl_pkey_export($new_key_pair$private_key_pem);

$details openssl_pkey_get_details($new_key_pair);
$public_key_pem $details['key'];

// 署名を作成
openssl_sign($data$signature$private_key_pemOPENSSL_ALGO_SHA256);

// それらを保存
file_put_contents('private_key.pem'$private_key_pem);
file_put_contents('public_key.pem'$public_key_pem);
file_put_contents('signature.dat'$signature);

// 署名を検証
$r openssl_verify($data$signature$public_key_pem"sha256WithRSAEncryption");
var_dump($r);
?>

参考

関連キーワード:  署名, 生成, string, key, data, private, signature, OpenSSLAsymmetricKey, sha, int