(PHP 4 >= 4.0.4, PHP 5)
openssl_verify — Verificar una firma
$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.
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".
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();
}
?>