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

PHP Основной курс

PHP Уровеньный курс

PHP & MySQL

PHP Референс Мануал

Применение и примеры функции PHP openssl_pkey_new()

Руководство по функциям OpenSSL PHP

Функция 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 для тонкой настройки генерации ключей (например, указание числа символов). Для получения дополнительной информации о configargs см. openssl_csr_new().

Конфигурационные параметры

По умолчанию, 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

Эта функция начнет работать с версии PHP 5.0.0 и выше.

Пример 1

Работа openssl_pkey_new():

<?php
   //Создание нового пары ключей (private и public)
   
      
      
      
   ));
	var_dump($privkey);
?>

Это приведет к следующим результатам:

ресурс (2) типа (OpenSSL key)

Пример 2

Работа openssl_pkey_new() и openssl_pkey_get_details:

<?php
   //Создание нового пары ключей (private и public)
   
      
      
      
   ));
   $key_details = openssl_pkey_get_details($privkey);
   print_r($key_details);
?>

Это приведет к следующим результатам:

Массив
(
    [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----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArAWYwKIaf3uN1bwww4R851ifDPGsreqr9cV3J1gSKC8kaAEsAQaZ/6gQlDBsUGs4nE8zKgOlcdOV/JApgAdz+CwoLJUgmEUkLDxOcWaCIUVuHAiyBGJaRKZ+MASy7wRG8hb+INd0/zoQRGXk3+jfFj6rvSinVg49C4RAkRtkEdNnH0G5s6cedV6ec30DouRTuEQ/Fgizf0qaVtQbAURPn+/LT9V8c4LMaCyID7caTQOXAEjQqD4ooXGkOzmcsp03j2/F+T2mSIQRtI1gGJkZoCMGX/xRxh5uemCcC4jcshn45Ikmb/S7WFqTCOC0e8l8CiTZ5Rr8EKFgtwliMds8pQIDAQAB -----END PUBLIC KEY-----

Пример 4

Сохранение public_key в файле openssl_pkey_new():

<?php
   //Генерация нового пары (с私钥和公钥)
   
      
      
      
   ));
   $keydetails = openssl_pkey_get_details($privkey);
   //Сохранение.public_key в файл
   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-----

Руководство по функциям OpenSSL PHP