PHP - Função openssl_pkey_new ()

Definição e Uso

o openssl_pkey_new() A função retornará o identificador de recurso que possui um novo par de chaves pública e privada.

Descrição

A função openssl_pkey_new () retorna um identificador de recurso. Você pode utilizar a função openssl_pkey_get_details () para obter todos os detalhes da chave gerada. A chave (par público / privado) é usada posteriormente com outra função openssl como openssl_sign (), openssl_csr_new () - para obter o certificado CSR, que ajuda a criar assinatura digital criptográfica.

Sintaxe

openssl_pkey_new ([ array $configargs ] ) : resource

Parâmetros

Sr. Não Parâmetro Descrição
1

configargs

O parâmetro configargssão os detalhes de configuração que precisam ser fornecidos à função para gerar o par de chaves privada / pública. Os detalhes são descritos a seguir.

configargs

Por padrão, o openssl_pkey_new () faz uso dos detalhes de configuração presentes no openssl.cnf. Mas usando configargs, você pode substituí-los. Os detalhes de configuração são os seguintes:

chave em configargs tipo chave usada em openssl.conf descrição
digest_alg corda default_md Métodos resumidos que você obtém em openssl_get_md_methods ().
x509_extensions corda x509_extensions Extensões usadas ao criar um certificado x509.
req_extensions corda req_extensions Extensões usadas ao criar um CSR.
private_key_bits inteiro default_bits Especifica quantos bits devem ser usados ​​ao gerar uma chave privada.
private_key_type inteiro Nenhum O tipo de chave privada a ser criada. Pode ser um de OPENSSL_KEYTYPE_DSA, OPENSSL_KEYTYPE_DH, OPENSSL_KEYTYPE_RSA ou OPENSSL_KEYTYPE_EC. O valor padrão é OPENSSL_KEYTYPE_RSA.
encrypt_key boleano encrypt_key Se a chave exportada deve ser criptografada?
encrypt_key_cipher inteiro Nenhum Constantes de codificação como OPENSSL_CIPHER_RC2_40 (inteiro), OPENSSL_CIPHER_RC2_128 (inteiro), OPENSSL_CIPHER_RC2_64 (inteiro), OPENSSL_CIPHER_DES (inteiro), OPENSSL_CIPHER_3DES (inteiro) etc.
curve_name corda Nenhum Um dos nomes da curva retornado por esta função openssl_get_curve_names ().
config corda N / D Você pode alterar a configuração em openssl.conf de acordo com suas necessidades e fornecer o caminho aqui.

Valores Retornados

A função PHP openssl_pkey_new () retorna um identificador de recurso se não houver erro. Ele retornará falso se a geração da chave falhar.

Versão PHP

Esta função funcionará na versão do PHP superior a 5.0.0.

Exemplo 1

Trabalho de openssl_pkey_new ():

<?php
   // Generate a new private (and public) key pair
   $privkey = openssl_pkey_new(array(
      "digest_alg"=>'md5',
      "private_key_bits" => 2048,
      "private_key_type" => OPENSSL_KEYTYPE_RSA,
   ));
   var_dump($privkey);
?>

Isso produzirá o seguinte resultado:

resource(2) of type (OpenSSL key)

Exemplo 2

Trabalho de openssl_pkey_new () e openssl_pkey_get_details:

<?php
   // Generate a new private (and public) key pair
   $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);
?>

Isso produzirá o seguinte resultado:

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  R g>>,PIzw>      c X   ^뀔  ~] dyV yz  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+# @ .  G IH tS R.mbc U~  7&w ݥ P. Fe ϨU @   m  X [email protected]/ $l  ) 8  @     c w  NRo  +! ' .  fv T7 =n")L Q s dš %zZ  G  { { 1 A^  v  E
         [p] =>  >u )   1bǰK r  pHE  k    LBE  y ' 3 - /   Pd  jeFV1     ? .O    : bl2  z  U  {  {   *   A   <  }m4  J Y ' [email protected]    
         [q] => ߦz\  96  =  V] "k  2 w    > r  袤 6 / -Z _   8!Y  I  L     _3Ym    . p  ֏ ^  > I:   o Z  "  =  8     뻢1    : 
         [dmp1] => z" TW*  Ƴm $ HQ  $0  sa  j   # 
         P  * P   Q G \42 a 26(  5 K 7zj  xj7  @e $.6   b D q]]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  M S"  ¥ )
         [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
   )

Exemplo 3

Para ler a chave pública de openssl_pkey_new ():

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

Isso produzirá o seguinte resultado:

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

Exemplo 4

Para armazenar a chave pública de openssl_pkey_new () em um arquivo:

<?php
   // Generate a new private (and public) key pair

   $privkey = openssl_pkey_new(array(
      "digest_alg"=>'md5',
      "private_key_bits" => 2048,
      "private_key_type" => OPENSSL_KEYTYPE_RSA,
   ));
   $keydetails = openssl_pkey_get_details($privkey);

   // To save the public key to a file 
   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-----