(PHP 4 >= 4.0.4, PHP 5, PHP 7)
openssl_verify — Verificar una firma
$data
, string $signature
, mixed $pub_key_id
[, mixed $signature_alg = OPENSSL_ALGO_SHA1
] ) : int
openssl_verify() verifica que la firma
signature es correcta para la información
data especificada usando la clave pública asociada con
pub_key_id. Ésta debe ser la clave pública que se
corresponde con la clave privada usada para firmar.
dataEl string de datos utilizado anteriormente para generar la firma.
signatureUn string binario puro generado por openssl_sign() o por medios similares
pub_key_idresource - una clave, devuelta por openssl_get_publickey()
string - una clave con formato PEM; p.ej., "-----BEGIN PUBLIC KEY----- MIIBCgK..."
signature_algint - uno de estos Algoritmos de firma.
string - un string válido devuelto por openssl_get_md_methods(); p.ej., "sha1WithRSAEncryption" o "sha512".
Devuelve 1 si la firma es correcta, 0 si es incorrecta, y -1 si se produjo un error.
| Versión | Descripción |
|---|---|
| 5.2.0 |
Se añadió el parámetro signature_alg.
|
Ejemplo #1 Ejemplo de openssl_verify()
<?php
// se asume que $data y $signature contienen la información y la firma
// obtener la clave pública desde el certifiado y prepararla
$pubkeyid = openssl_pkey_get_public("file://src/openssl-0.9.6/demos/sign/cert.pem");
// especificar si la firma es correcta o no
$ok = openssl_verify($data, $signature, $pubkeyid);
if ($ok == 1) {
echo "buena";
} elseif ($ok == 0) {
echo "mala";
} else {
echo "alarmante, error verificando la firma";
}
// liberar la clave de la memoria
openssl_free_key($pubkeyid);
?>
Ejemplo #2 openssl_verify() example
<?php
// datos que se quieren firmar
$datos = 'mis datos';
// crear unas claves pública y privada nuevas
$private_key_res = openssl_pkey_new(array(
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
));
$details = openssl_pkey_get_details($private_key_res);
$public_key_res = openssl_pkey_get_public($details['key']);
// crear la firma
openssl_sign($datos, $firma, $private_key_res, "sha1WithRSAEncryption");
// comprobar la firma
$ok = openssl_verify($datos, $firma, $public_key_res, OPENSSL_ALGO_SHA1);
if ($ok == 1) {
echo "válida";
} elseif ($ok == 0) {
echo "no válida";
} else {
echo "error: ".openssl_error_string();
}
?>