署名を生成する

# openssl_sign

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

openssl_sign — 署名を生成する

### 説明

openssl_sign ( string `$data` , string `&$signature` , mixed `$priv_key_id` [, mixed `$signature_alg` = OPENSSL_ALGO_SHA1 ] ) : bool

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

### パラメータ

`data`

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

`signature`

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

`priv_key_id`

  resource - openssl_get_privatekey() が返す鍵。

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

`signature_alg`

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

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

### 返り値

成功した場合に `TRUE` を、失敗した場合に `FALSE` を返します。

### 例

例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_pem, OPENSSL_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);
?>`

### 参考

- openssl_verify() - 署名を検証する