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

Tutorial básico PHP

Tutorial avançado PHP

PHP & MySQL

Manual de referência PHP

Uso e exemplo da função openssl_pkey_new() em PHP

PHP OpenSSL 函数手册

A função openssl_pkey_new() é usada para gerar uma nova chave privada.

Definição e uso

openssl_pkey_new() gera um novo par de chave privada e pública. Você pode obter o componente público dessa chave usando a função openssl_pkey_get_public().

A função openssl_pkey_new() retorna um identificador de recurso. Você pode usar a função openssl_pkey_get_details() para obter todos os detalhes da chave gerada. Chave (pública/Uso exclusivo para) mais tarde, juntamente com outras funções openssl (por exemplo, openssl_sign(), openssl_csr_new())-Obtenha o certificado CSR, que ajuda a criar assinaturas digitais criptografadas.

Sintaxe

openssl_pkey_new ([ array $configargs ] ) : resource

Parâmetros

Número de sérieParâmetrosChave usada no openssl.conf
1

Padrão, openssl_pkey_new( ) usa detalhes de configuração existentes no openssl.cnf. No entanto, pode ser substituído usando configargs. Os detalhes de configuração são os seguintes:

Você pode usar o parâmetro configargs para ajustar a geração da chave (por exemplo, especificar o número de dígitos). Consulte openssl_csr_new() para mais informações sobre configargs.

配置参数

Parâmetros de configuração

Padrão, openssl_pkey_new( ) usa detalhes de configuração existentes no openssl.cnf. No entanto, pode ser substituído usando configargs. Os detalhes de configuração são os seguintes:configargsTipoChave usada no openssl.conf
Descriçãocadeiadigest_algdefault_md
O método de resumo obtido a partir de openssl_get_md_methods().509xcadeiaO método de resumo obtido a partir de openssl_get_md_methods().509x_extensions509x
O nome da extensão usado ao criar o certificado.cadeiaO nome da extensão usado ao criar o certificado.req_extensions
O nome da extensão usado ao criar o CSR.encrypt_key_cipherprivate_key_bitsdefault_bits
Especifique o número de bits a ser usado ao gerar a chave privada.encrypt_key_ciphernenhumprivate_key_type
booleanoO tipo de chave privada a ser criada. Pode ser um dos seguintes: OPENSSL_KEYTYPE_DSA, OPENSSL_KEYTYPE_DH, OPENSSL_KEYTYPE_RSA ou OPENSSL_KEYTYPE_EC. O valor padrão é OPENSSL_KEYTYPE_RSA.booleanoencrypt_key
O chave exportada está criptografada?encrypt_key_ciphernenhuminteiro2_4Constantes de criptografia, por exemplo, OPENSSL_CIPHER_RC2_1280 (inteiro), OPENSSL_CIPHER_RC2_64_ (inteiro), OPENSSL_CIPHER_RC3DES (inteiro), OPENSSL_CIPHER_DES (inteiro), OPENSSL_CIPHER_
curve_namecadeianenhumUm dos nomes de curva retornados pela função openssl_get_curve_names().
configcadeiaN/AVocê pode alterar as configurações no openssl.conf conforme necessário e fornecer o caminho aqui.

Valor de retorno

Se não houver erros, a função PHP openssl_pkey_new() retornará um identificador de recurso. Se a geração da chave falhar, ela retornará false.

versão do PHP

Esta função retornará um identificador de recurso a partir de versões do PHP maiores que5começa a funcionar a partir da versão 0.0 do PHP.

Exemplo1

A função openssl_pkey_new():

<?php
   //Gerar um novo par de chaves privada (e pública)
   $privkey = openssl_pkey_new(array(
      "digest_alg" => md5',
      "private_key_bits" => 2048,
      "private_key_type" => OPENSSL_KEYTYPE_RSA,
   ));
	var_dump($privkey);
?>

这将产生以下结果:

recurso(2) de tipo (Chave OpenSSL)

Exemplo2

A função openssl_pkey_new() e openssl_pkey_get_details():

<?php
   //Gerar um novo par de chaves privada (e pública)
   $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-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1=>IGWxnWzICSkjrOVrYkw
9=>EKpIhcAYbhaymiwQY/=>ii9=>d7=>hnuGhpjjitDxzFftGafL6=>XOFKOhgbO2=>yrcpFxRKu
=>AY3t5=>wyUcqUJV6=>CNwV2=>Hipk9=>0psUcTmK3+=>pcCzcqCKr7=>sLWlHI48=>lse92=>xane8=>Sf
=>CATNNbr9=>vmqUaTZ9=>FQqWihm3=>o/=>rNGuZTwMSKvcKsVguFpwrEDJaSLP1=>nt7=>RSHGc+
=>PixQSXp3=>PtQCH+=>S0CM9=>jt1=>jD9=>NkYXuuAlNbrsPm1=>fl2=>zAGR5=>Vh15=>evz5765=>lZ2=>mH
=>LIZScfsO/=>qgai3R6=>foaBlJM5=>tiSeiVZgnnQDKFBi5XK2=>GhzDnKggJe4=>tdY7=>awTFm
=>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 => mstz => ~ =>9=>$ => V` => t(Pb => r => =>  % =>-=>u =>1=>f	
            =>[ => e => => 
            =>[ => d => => F" =>3����4=> => !K => yF => R => lY =>9=>] => Ξ => A => @ => f => ~ => < => YPєG => = => ���TkTP => rl => M => ԓ{ => l => 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^ => E
            [p] => =>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
)

Exemplo3

要从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-----

Exemplo4

Para salvar a chave pública no arquivo usando openssl_pkey_new():

<?php
   // Gerar um novo par de chaves privada (e pública)
   $privkey = openssl_pkey_new(array(
      "digest_alg" => md5',
      "private_key_bits" => 2048,
      "private_key_type" => OPENSSL_KEYTYPE_RSA,
   ));
   $keydetails = openssl_pkey_get_details($privkey);
   //Para salvar a chave pública em um arquivo:
   file_put_contents('mypublic.key', $keydetails['key']);
?>

O conteúdo do arquivo 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 函数手册