PHP openssl_pkey_new() 函数用法及示例

PHP OpenSSL 函数手册

openssl_pkey_new()()函数用于生成一个新的私钥。

定义和用法

openssl_pkey_new() 生成一个新的私钥和公钥对。通过 openssl_pkey_get_public() 函数获取该密钥的公共组件。

函数openssl_pkey_new()返回资源标识符。您可以使用 openssl_pkey_get_details() 函数获取生成的密钥的所有详细信息。密钥(公用/专用对)稍后与其他openssl函数(例如openssl_sign(),openssl_csr_new())一起使用-获得CSR证书,该证书有助于创建加密数字签名。

语法

openssl_pkey_new ([ array $configargs ] ) : resource

参数

序号参数描述
1

configargs

你可以使用configargs参数微调密钥的生成(比如指定位数)。查看openssl_csr_new()获取更多关于configargs的信息。

配置参数

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

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

返回值

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

PHP版本

此函数将从大于5.0.0的PHP版本开始工作。

实例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);
?>

这将产生以下结果:

Array
(
    [bits] => 2048
    [key] => -----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1IGWxnWzICSkjrOVrYkw
9EKpIhcAYbhaymiwQY/ii9d7hnuGhpjjitDxzFftGafL6XOFKOhgbO2yrcpFxRKu
AY3t5wyUcqUJV6CNwV2Hipk90psUcTmK3+pcCzcqCKr7sLWlHI48lse92xane8Sf
CATNNbr9vmqUaTZ9FQqWihm3o/rNGuZTwMSKvcKsVguFpwrEDJaSLP1nt7RSHGc+
PixQSXp3PtQCH+S0CM9jt1jD9NkYXuuAlNbrsPm1fl2zAGR5Vh15evz5765lZ2mH
LIZScfsO/qgai3R6foaBlJM5tiSeiVZgnnQDKFBi5XK2GhzDnKggJe4tdY7awTFm
CQIDAQAB
-----END PUBLIC KEY-----

    [rsa] => Array
        (
            [n] => u $0B"aZhA{{Ws(`lEr	W]=q9\7*<{g5ji6}
SCnotV
,gRg>>,PIzw>cX^~]dyVyzegi,Rqtz~9$V`t(Pbr"U %-u1f	
            [e] => 
            [d] => F"34!KyFRlY9]ΞA@f~<YPG=TkTPrlM{lU^!q7|flE+#@.GIHtSR.mbcU~7&wP.FeU@mXECsemjI$@/$l)8@cwNRo+!'.fvT7=n")LQsd%zZG{{1A^vE
            [p] => >u)1bKrpHEkLBEy'3-/PdjeFV1?.O:bl2zU{{*A<}m4JY'f@
            [q] => z\96=V]"k2w>r袤6/-Z_8!YIL_3Ym.p^>I:oZ"=81:
            [dmp1] => z"TW*m$HQ$0saj #
P*PQG\42a26(5K7zjxj7@e$.6bDq]]I}Lmd54)@:#
            [dmq1] => +4}\dcRKBw\E6%_m$3蚞9FhDuz$8HPKˇ^Kk]eg>oX"<`e&,9EMS"yen)
            [iqmp] => !=z=7V6q~3VtP$Okgv3=W\m	J5^Kat~U.!lv#z*	r
        )

    [type] => 0
)

实例3

要从openssl_pkey_new()读取公钥:

<?php
   echo "The hash of Welcome to nhooo is - ". hash('crc32b', 'Welcome to nhooo');
?>

这将产生以下结果:

-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArAWYwKIaf3uN1bwww4R8 51ifDPGsreqr9cV3J1gSKC8kaAEsAQaZ/6gQlDBsUGs4nE8zKgOlcdOV/JApgAdz +CwoLJUgmEUkLDxOcWaCIUVuHAiyBGJaRKZ+MASy7wRG8hb+INd0/zoQRGXk3+jf Fj6rvSinVg49C4RAkRtkEdNnH0G5s6cedV6ec30DouRTuEQ/Fgizf0qaVtQbAURP n+/LT9V8c4LMaCyID7caTQOXAEjQqD4ooXGkOzmcsp03j2/F+T2mSIQRtI1gGJkZ oCMGX/xRxh5uemCcC4jcshn45Ikmb/S7WFqTCOC0e8l8CiTZ5Rr8EKFgtwliMds8 pQIDAQAB -----END PUBLIC KEY-----

实例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-----

PHP OpenSSL 函数手册