# openssl_sign

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

openssl_sign — Genera una firma

### Descripción

openssl_sign(
string `$data`,
string `&$signature`,
mixed `$priv_key_id`,
mixed `$signature_alg` = OPENSSL_ALGO_SHA1
): bool

openssl_sign() computa una firma para la información `data` especificada, generando una firma digital criptográfica usando la clave privada asociada con `priv_key_id`. Observe que la información misma no está encriptada.

### Parámetros

`data`

  El string de datos que se quieren firmar.

`signature`

  Si la llamada tuvo éxito, la firma es devuelta en `signature`.

`priv_key_id`

  resource - una clave, devuelta por openssl_get_privatekey()

  string - una clave con formato PEM

`signature_alg`

  int - uno de estos Algoritmos de firma.

  string - un string válido devuelto por openssl_get_md_methods(); p.ej., "sha256WithRSAEncryption" o "sha384".

### Valores devueltos

Devuelve `true` en caso de éxito o `false` en caso de error.

### Ejemplos

Ejemplo #1 Ejemplo de openssl_sign()

`<?php
// se asume que $datos contiene la información que se va a firmar
// obtener la clave privada desde el fichero y prepararla
$pkeyid = openssl_pkey_get_private("file://src/openssl-0.9.6/demos/sign/key.pem");
// computar la firma
openssl_sign($datos, $firma, $pkeyid);
// liberar la clave de la memoria
openssl_free_key($pkeyid);
?>`

Ejemplo #2 Ejemplo de openssl_sign()

`<?php
// datos que se quieren firmar
$datos = 'mis datos';
// crear unas claves pública y privada nuevas
$new_key_pair = openssl_pkey_new(array(
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
));
openssl_pkey_export($new_key_pair, $private_key_pem);
$details = openssl_pkey_get_details($new_key_pair);
$public_key_pem = $details['key'];
// crear la firma
openssl_sign($datos, $firma, $private_key_pem, OPENSSL_ALGO_SHA256);
// guardar para después
file_put_contents('private_key.pem', $private_key_pem);
file_put_contents('public_key.pem', $public_key_pem);
file_put_contents('signature.dat', $firma);
// comprobar la firma
$r = openssl_verify($datos, $firma, $public_key_pem, "sha256WithRSAEncryption");
var_dump($r);
?>`

### Ver también

- openssl_verify() - Verificar una firma