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