English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP 基础教程

PHP 高级教程

PHP & MySQL

PHP 参考手册

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_mdopenssl_get_md_methods()에서 얻은 요약 방법.
x509_extensions문자열x509_extensionsx509证书를 생성할 때 사용하는 확장자.
req_extensions문자열req_extensionsCSR을 생성할 때 사용하는 확장자.
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문자열noneopenssl_get_curve_names() 함수가 반환하는 곡선 이름 중 하나입니다.
config문자열N/Aopenssl.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 w3codebox is - ". hash('crc32b', 'Welcome to w3codebox');
?>

这将产生以下结果:

-----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 함수 설명서