# openssl_verify

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

openssl_verify — 验证签名

### 说明

openssl_verify ( string `$data` , string `$signature` , mixed `$pub_key_id` [, mixed `$signature_alg` = OPENSSL_ALGO_SHA1 ] ) : int

openssl_verify() 使用与`pub_key_id`关联的公钥验证指定数据`data`的签名`signature`是否正确。这必须是与用于签名的私钥相对应的公钥。

### 参数

`data`

  以前用来生成签名的数据字符串。

`signature`

  原始二进制字符串，通过openssl_sign()或类似的函数生成。

`pub_key_id`

  resource _ 一个密钥, 通过 openssl_get_publickey() 函数返回。

  string - 一个 PEM 格式的密钥, 比如, "-----BEGIN PUBLIC KEY----- MIIBCgK..."

`signature_alg`

  int _ 以下签名算法之一Signature Algorithms.

  string _ 由openssl_get_md_methods()函数返回的可用字符串，比如， "sha1WithRSAEncryption" 或者 "sha512".

### 返回值

如果签名正确返回 1, 签名错误返回 0, 内部发生错误则返回-1.

### 更新日志

版本 | 说明
--- | ---
5.2.0 | 添加了 `signature_alg` 参数。

### 范例

Example #1 openssl_verify() 范例：

    <?php
    // $data and $signature are assumed to contain the data and the signature

    // fetch public key from certificate and ready it
    $pubkeyid = openssl_pkey_get_public("file://src/openssl-0.9.6/demos/sign/cert.pem");

    // state whether signature is okay or not
    $ok = openssl_verify($data, $signature, $pubkeyid);
    if ($ok == 1) {
        echo "good";
    } elseif ($ok == 0) {
        echo "bad";
    } else {
        echo "ugly, error checking signature";
    }
    // free the key from memory
    openssl_free_key($pubkeyid);
    ?>

Example #2 openssl_verify() 范例：

    <?php
    //data you want to sign
    $data = 'my data';

    //create new private and public key
    $private_key_res = openssl_pkey_new(array(
        "private_key_bits" => 2048,
        "private_key_type" => OPENSSL_KEYTYPE_RSA,
    ));
    $details = openssl_pkey_get_details($private_key_res);
    $public_key_res = openssl_pkey_get_public($details['key']);

    //create signature
    openssl_sign($data, $signature, $private_key_res, "sha1WithRSAEncryption");

    //verify signature
    $ok = openssl_verify($data, $signature, $public_key_res, OPENSSL_ALGO_SHA1);
    if ($ok == 1) {
        echo "valid";
    } elseif ($ok == 0) {
        echo "invalid";
    } else {
        echo "error: ".openssl_error_string();
    }
    ?>

### 参见

- openssl_sign() - Generate signature