Documentación offline PHP master

openssl_pkey_new

master Ver versión oficial en línea Licencia CC-BY-3.0Descargado el 2026-08-02

En esta página

openssl_pkey_new

Genera una nueva clave privada

Descripción#

openssl_pkey_new([array $options]): OpenSSLAsymmetricKey
```php

`openssl_pkey_new` genera una nueva clave privada. Cómo obtener el componente público de la clave se demuestra en un ejemplo a continuación.

> [!NOTE]
> Debe existir un archivo `openssl.cnf` válido e instalado para que esta función opere correctamente. Ver las notas encontradas en la [sección concerniente a la instalación](#openssl.installation) para más información.

## Parámetros

`options`  
Es posible afinar la generación de claves (por ejemplo, especificando el número de bits o los parámetros) mediante el argumento `options`. Estas opciones pueden ser parámetros específicos del algoritmo utilizados para la generación de claves, u opciones genéricas también utilizadas para la generación de CSR si no se especifican. Consulte `openssl_csr_new` para obtener más información sobre el uso de `options` para un CSR. Entre estas opciones, solo `private_key_bits`, `private_key_type`, `curve_name`, y `config` se utilizan para la generación de claves. Las opciones específicas de un algoritmo se utilizan si el array asociativo incluye una de las claves específicas.

- Clave `"rsa"` para definir los parámetros RSA.

  | options  | type     | format         | requis | description                       |
  |----------|----------|----------------|--------|-----------------------------------|
  | `"n"`    | `string` | número binario | sí     | módulo                            |
  | `"e"`    | `string` | número binario | no     | exponente público                 |
  | `"d"`    | `string` | número binario | sí     | exponente privado                 |
  | `"p"`    | `string` | número binario | no     | primer 1                          |
  | `"q"`    | `string` | número binario | no     | primer 2                          |
  | `"dmp1"` | `string` | número binario | no     | exponent1, d mod (p-1)            |
  | `"dmq1"` | `string` | número binario | no     | exponent2, d mod (q-1)            |
  | `"iqmp"` | `string` | número binario | no     | coeficiente, (inverso de q) mod p |

- Clave `"dsa"` para definir los parámetros DSA.

  | options | type | format | requis | description |
  |----|----|----|----|----|
  | `"p"` | `string` | número binario | no | número primo (público) |
  | `"q"` | `string` | número binario | no | 160 bits sub-prime, q \| p-1 (público) |
  | `"g"` | `string` | número binario | no | generador del subgrupo (público) |
  | `"priv_key"` | `string` | clave PEM | no | clave privada x |
  | `"pub_key"` | `string` | clave PEM | no | clave pública y = g^x |

- Clave `"dh"` para los parámetros DH (intercambio de claves Diffie–Hellman).

  | Options      | Tipo     | Format         | Requis | Descripción                   |
  |--------------|----------|----------------|--------|-------------------------------|
  | `"p"`        | `string` | número binario | no     | número primo (compartido)     |
  | `"g"`        | `string` | número binario | no     | generador de Z_p (compartido) |
  | `"priv_key"` | `string` | clave PEM      | no     | valor DH privado x            |
  | `"pub_key"`  | `string` | clave PEM      | no     | valor DH público g^x          |

- Clave `"ec"` para los parámetros de curva elíptica

  | Options | Tipo | Format | Requis | Descripción |
  |----|----|----|----|----|
  | `"curve_name"` | `string` | nombre | no | nombre de la curva, ver `openssl_get_curve_names` |
  | `"p"` | `string` | número binario | no | número primo del campo para la curva sobre Fp |
  | `"a"` | `string` | número binario | no | coeficiente a de la curva para Fp : y^2 mod p = x^3 + ax + b mod p |
  | `"b"` | `string` | número binario | no | coeficiente b de la curva para Fp : y^2 mod p = x^3 + ax + b mod p |
  | `"seed"` | `string` | número binario | no | número aleatorio opcional utilizado para generar el coeficiente b |
  | `"generator"` | `string` | punto codificado en binario | no | punto generador de la curva |
  | `"g_x"` | `string` | número binario | no | coordenada x del punto generador de la curva |
  | `"g_y"` | `string` | número binario | no | coordenada y del punto generador de la curva |
  | `"cofactor"` | `string` | número binario | no | cofactor de la curva |
  | `"order"` | `string` | número binario | no | orden de la curva |
  | `"x"` | `string` | número binario | no | coordenada x (pública) |
  | `"y"` | `string` | número binario | no | coordenada y (pública) |
  | `"d"` | `string` | número binario | no | clave privada |

- Claves `"x25519"`, `"x448"`, `"ed25519"`, `"ed448"` para los parámetros Curve25519 y Curve448.

  | Options      | Tipo     | Format    | Requis | Descripción   |
  |--------------|----------|-----------|--------|---------------|
  | `"priv_key"` | `string` | clave PEM | no     | clave privada |
  | `"pub_key"`  | `string` | clave PEM | no     | clave pública |

## Valores devueltos

Devuelve una instancia de `OpenSSLAsymmetricKey` en caso de éxito, `false` en caso de error.

## Historial de cambios

| Versión | Descripción |
|----|----|
| 8.4.0 | Se añadió el soporte para claves basadas en Curve25519 y Curve448 con la introducción de los campos `x25519`, `ed25519`, `x448`, y `ed448`. |
| 8.3.0 | Se añadió el soporte para la generación de claves EC con parámetros EC personalizados. Más específicamente, con la introducción de las opciones EC: `p`, `a`, `b`, `seed`, `generator`, `g_x`, `g_y`, `cofactor`, y `order`. |
| 8.0.0 | En caso de éxito, esta función devuelve ahora una instancia de `OpenSSLAsymmetricKey`; anteriormente, se devolvía un `resource` de tipo `OpenSSL key`. |
| 7.1.0 | Se añadió la opción `curve_name` para permitir la creación de claves EC. |

## Ejemplos

Obtener la clave pública a partir de una clave privada
Resultado del ejemplo anterior es similar a:

    // Resultado antes de PHP 8.0.0; note que la función devuelve un recurso
    -----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwknBFEherZe74BiRjTFA
    hqwZ1SK7brwq7C/afnLXKhRR7jnrpfM0ypC46q8xz5UZswenZakJ7kd5fls+r4Bv
    3P8XsKYLTh2m1GiWQhV1g77cNIN4qNWh70PiDO3fB2446o1LBgToQYuRZS5YQRfJ
    rVD0ysgtVcCU9tjaey28HlgApOpYFTaaKPj2MBmEYpMC+kG2HhL12GfpHUi2eiXI
    dXT2WskWHWvUrmQ7fJIfI92JlDokV62DH/q1oiedLs9OPNb0rL1aAmYdzaVN6XNH
    x/o4Lh125v2vAPV9E3fZCDc/HDEUaahpjanMiCQEgEDp5Hr+CRkvERT5/ydN+p08
    5wIDAQAB
    -----END PUBLIC KEY-----
    resource(6) of type (OpenSSL key)

    // Resultado a partir de PHP 8.0.0; note que la función devuelve un objeto
    -----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwknBFEherZe74BiRjTFA
    hqwZ1SK7brwq7C/afnLXKhRR7jnrpfM0ypC46q8xz5UZswenZakJ7kd5fls+r4Bv
    3P8XsKYLTh2m1GiWQhV1g77cNIN4qNWh70PiDO3fB2446o1LBgToQYuRZS5YQRfJ
    rVD0ysgtVcCU9tjaey28HlgApOpYFTaaKPj2MBmEYpMC+kG2HhL12GfpHUi2eiXI
    dXT2WskWHWvUrmQ7fJIfI92JlDokV62DH/q1oiedLs9OPNb0rL1aAmYdzaVN6XNH
    x/o4Lh125v2vAPV9E3fZCDc/HDEUaahpjanMiCQEgEDp5Hr+CRkvERT5/ydN+p08
    5wIDAQAB
    -----END PUBLIC KEY-----

    object(OpenSSLAsymmetricKey)#2 (0) {
    }

Generación de una clave RSA a partir de parámetros
[ 'n' => hex2bin($nhex), 'e' => hex2bin($ehex), 'd' => hex2bin($dhex), 'p' => hex2bin($phex), 'q' => hex2bin($qhex), 'dmp1' => hex2bin($dphex), 'dmq1' => hex2bin($dqhex), 'iqmp' => hex2bin($qinvhex), ], ]); $details = openssl_pkey_get_details($rsa); var_dump($details); ?>

```php