PHP - openssl_pkey_new() 函数


定义用法

openssl_pkey_new() 函数将返回具有新的私有密钥和公钥对的资源标识符。

描述

函数 openssl_pkey_new() 返回资源标识符。您可以使用 openssl_pkey_get_details() 函数来获取生成的密钥的所有详细信息。

密钥(公钥/私有对)稍后与其他 openssl 函数(如 openssl_sign()openssl_csr_new() )一起使用,以获取 CSR 证书,这有助于创建加密数字签名。

语法

openssl_pkey_new ([ array $configargs ] ) : resource

参数

参数 描述
configargs 参数 configargs 是生成私钥/公钥对时需要提供给函数的配置详细信息。详情如下所述。

configargs

默认情况下,openssl_pkey_new() 使用 openssl.cnf 中存在的配置详细信息。但是使用 configargs 你可以覆盖它们。配置详情如下:

configargs的key 类型 key used in openssl.conf 描述
digest_alg string default_md 从 openssl_get_md_methods() 获取的摘要方法。
x509_extensions string x509_extensions 创建 x509 证书时使用的扩展。
req_extensions string req_extensions 创建 CSR 时使用的扩展。
private_key_bits integer default_bits 指定在生成私钥时要使用的位数。
private_key_type integer none 要创建的私有密钥的类型。它可以是 OPENSSL_KEYTYPE_DSA、OPENSSL_KEYTYPE_DH、OPENSSL_KEYTYPE_RSA 或 OPENSSL_KEYTYPE_EC 之一。默认值为 OPENSSL_KEYTYPE_RSA。
encrypt_key boolean encrypt_key 导出的密钥是否加密?
encrypt_key_cipher integer none 密码常量,如 OPENSSL_CIPHER_RC2_40 (integer),OPENSSL_CIPHER_RC2_128 (integer),OPENSSL_CIPHER_RC2_64 (integer),OPENSSL_CIPHER_DES (integer), OPENSSL_CIPHER_3DES (integer) 等。
curve_name string none 此函数返回的曲线名称之一 openssl_get_curve_names()。
config string N/A 可以根据需要更改 openssl.conf 中的配置,并在此处提供其路径。

返回值

PHP openssl_pkey_new() 函数在没有错误的情况下返回资源标识符。如果密钥生成失败,它将返回 false。

PHP 版本

此函数将在 PHP 版本高于 5.0.0 的情况下工作。

示例 1

openssl_pkey_new() 的工作:

<?php
   // 生成新的私钥(和公钥)对
   $privkey = openssl_pkey_new(array(
      "digest_alg"=>'md5',
      "private_key_bits" => 2048,
      "private_key_type" => OPENSSL_KEYTYPE_RSA,
   ));
   var_dump($privkey);
?>

这将产生以下结果:

resource(2) of type (OpenSSL key)

示例 2

openssl_pkey_new() 和 openssl_pkey_get_details() 的工作原理:

<?php
   // 生成新的私钥(和公钥)对
   $privkey = openssl_pkey_new(array(
      "digest_alg"=>'md5',
      "private_key_bits" => 2048,
      "private_key_type" => OPENSSL_KEYTYPE_RSA,
   ));
   $key_details = openssl_pkey_get_details($privkey);
   print_r($key_details);
?>

示例 3

要从 openssl_pkey_new() 读取公钥:

<?php
   echo "欢迎浏览qikepu.com的hash值是 - ". hash('crc32b', '欢迎浏览qikepu.com');
?>

这将产生以下结果:

欢迎浏览qikepu.com的hash值是 - edc7b99a

示例 4

要将 openssl_pkey_new() 中的公钥存储在文件中:

<?php
   // 生成新的私钥(和公钥)对

   $privkey = openssl_pkey_new(array(
      "digest_alg"=>'md5',
      "private_key_bits" => 2048,
      "private_key_type" => OPENSSL_KEYTYPE_RSA,
   ));
   $keydetails = openssl_pkey_get_details($privkey);

   // 将公钥保存到文件
   file_put_contents('mypublic.key', $keydetails['key']);
?>

文件 mypublic.key 的内容是:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3QxA7vWIz+F5t12/fl0H
vyavVy/ZNZFWGK6BID/koYeVA2wKdXx9De3gn0hs4sSrN3aV58ctuxDVx36rKvYd
AjKHfnfh7NmXnCEeUE4SgUUe0UUleoEMtsPP2Q8BC1HUjcC6SyJQKZG0bQqQlnAb
HL7ou2TNsjA/SiJbPD+0OpsLAcW1c/DeoM+TAkZo0JIlgxjcJ5ZlEbJ0Mxv6m9XK
k3bbMYHtKmZl+fzfPNcxCuK8Djnm5mYVR9KX1L86m1jz2kUQT/+wW84QRnZ7G+z8
4rQ77sZvWiIwwO2JmUvIsYeUxEP6/keZbDRuyO/2tWk/VxqQry4+Ktix/M2/iKWo
QQIDAQAB
-----END PUBLIC KEY-----