openssl_verify
(PHP 4 >= 4.0.4, PHP 5)
openssl_verify — Verificar una firma
Descripción
$data
, string $signature
, mixed $pub_key_id
[, mixed $signature_alg = OPENSSL_ALGO_SHA1
] )
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.
Parámetros
-
data -
El string de datos utilizado anteriormente para generar la firma.
-
signature -
Un string binario puro generado por openssl_sign() o por medios similares
-
pub_key_id -
resource - una clave, devuelta por openssl_get_publickey()
string - una clave con formato PEM; p.ej., "-----BEGIN PUBLIC KEY----- MIIBCgK..."
-
signature_alg -
int - uno de estos Algoritmos de firma.
string - un string válido devuelto por openssl_get_md_methods(); p.ej., "sha1WithRSAEncryption" o "sha512".
Valores devueltos
Devuelve 1 si la firma es correcta, 0 si es incorrecta, y -1 si se produjo un error.
Historial de cambios
| Versión | Descripción |
|---|---|
| 5.2.0 |
Se añadió el parámetro signature_alg.
|
Ejemplos
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();
}
?>