PHP openssl_pkey_new() 函数用法及示例
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� $������0�B�"a�Z�h�A���{�{�������W����s�(�`l����E������r� W���]���=қq9���\7*������<�ǽ��{ğ�5���j�i6} �������S�Ċ�¬V�� ���,�g��Rg>>,PIzw>���c�X���^뀔����~]�dyVyz���egi�,�Rq����tz~����9�$��V`�t(Pb�r�Ü� %�-u���1f [e] => [d] => F"���3����4��!K�yF��R�lY�9�]Ξ��A��@�f��~�<�YPєG��=���TkTP�rl�Mԓ{�lŮ^��!����q�˂�7�|�f����lE+#�@�.�GIH�tS�R.mbc�U~����7&w�ݥ�P.Fe�ϨU�@��m��X�ECsemjI$@/�$l����)�8�@���c�w�NRo���+!'�.����fvT7�=n")LQ�sd�%zZ���G��{�{�1A^��v��E [p] => �>u)��1bǰK�r���pHE��k���LBE����y�'�3-�/��Pd���jeFV1����?�.O�����:�bl2�z�U�{��{��*��A���<�}m4��J�Y�'���f@����� [q] => ߦz\��96�=��V]"k��2w���>�r�袤�6�/�-Z�_�����8!Y��I��L���_3Ym�����.p�֏^����>�I:��oZ��"���=��8���뻢1�����:� [dmp1] => z"�TW*��Ƴm�$�HQ�$0���sa��j� #� P�*�P��Q�G\42�a�26(�5�K�7zj���xj7��@e�$.6��b�Dq]]I}�L�m�d��54)@:���# [dmq1] => +����4}��\dc�R�K�Bw�\�E6�ؓ�����%_�m$3蚞9��Fh�D�uz����$�8HPK�ˇԁ^���K�k�]e�g�>ºX�"<ƌ���`ė���&,9E��MS"��¥�) [iqmp] => !�����߷�=�z�=ܰ7����V�6q�~���3V��t�P�$��O�kgv��3=W\ѝm��� �J���5^�K��a�t��~������U�.��!�l�v�#��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-----