PHP - Función openssl_pkey_new ()

Definición y uso

los openssl_pkey_new() La función devolverá el identificador de recurso que tiene un nuevo par de claves pública y privada.

Descripción

La función openssl_pkey_new () devuelve un identificador de recurso. Puede hacer uso de la función openssl_pkey_get_details () para obtener todos los detalles de la clave generada. La clave (par público / privado) se usa más tarde con otra función openssl como openssl_sign (), openssl_csr_new () - para obtener el certificado CSR, que ayuda a crear una firma digital criptográfica.

Sintaxis

openssl_pkey_new ([ array $configargs ] ) : resource

Parámetros

No Señor Parámetro Descripción
1

configargs

El parámetro configargsson los detalles de configuración que deben proporcionarse a la función para generar el par de claves pública / privada. Los detalles se describen a continuación.

configargs

De forma predeterminada, openssl_pkey_new () hace uso de los detalles de configuración presentes en openssl.cnf. Pero usando configargs puede sobrescribirlos. Los detalles de la configuración son los siguientes:

clave en configargs tipo clave utilizada en openssl.conf descripción
digest_alg cuerda default_md Resumen de los métodos que obtiene de openssl_get_md_methods ().
x509_extensions cuerda x509_extensions Extensiones utilizadas al crear un certificado x509.
req_extensions cuerda req_extensions Extensiones que se utilizan al crear un CSR.
bits_de_clave_privada entero bits_por defecto Especifica cuántos bits se utilizarán al generar una clave privada.
tipo_clave_privada entero ninguna El tipo de clave privada que se creará. Puede ser uno de OPENSSL_KEYTYPE_DSA, OPENSSL_KEYTYPE_DH, OPENSSL_KEYTYPE_RSA o OPENSSL_KEYTYPE_EC. El valor predeterminado es OPENSSL_KEYTYPE_RSA.
clave_cifrada booleano clave_cifrada ¿Está cifrada la clave exportada?
encrypt_key_cipher entero ninguna Constantes de cifrado como OPENSSL_CIPHER_RC2_40 (integer), OPENSSL_CIPHER_RC2_128 (integer), OPENSSL_CIPHER_RC2_64 (integer), OPENSSL_CIPHER_DES (integer), OPENSSL_CIPHER_3DES (integer) etc.
nombre_curva cuerda ninguna Uno de los nombres de curva devueltos por esta función openssl_get_curve_names ().
config cuerda N / A Puede cambiar la configuración en openssl.conf según sus requisitos y proporcionar la ruta aquí.

Valores devueltos

La función PHP openssl_pkey_new () devuelve un identificador de recurso si no hay ningún error. Devolverá falso si falla la generación de claves.

Versión PHP

Esta función funcionará a partir de la versión PHP superior a 5.0.0.

Ejemplo 1

Funcionamiento 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);
?>

Esto producirá el siguiente resultado:

resource(2) of type (OpenSSL key)

Ejemplo 2

Funcionamiento de openssl_pkey_new () y 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);
?>

Esto producirá el siguiente 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
   )

Ejemplo 3

Para leer la clave pública de openssl_pkey_new ():

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

Esto producirá el siguiente 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-----

Ejemplo 4

Para almacenar la clave pública de openssl_pkey_new () en un archivo:

<?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']);
?>

El contenido del archivo mypublic.key es:

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