(PHP 4 >= 4.0.4, PHP 5, PHP 7)
openssl_sign — Genera una firma
$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.
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".
Devuelve TRUE
en caso de éxito o FALSE
en caso de error.
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);
?>