openssl_pkey_new
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
```php