(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
openssl_verify — Verifica una firma
$data
,$signature
,$public_key
,$algorithm
= OPENSSL_ALGO_SHA1
openssl_verify() verifica que la firma
signature
es correcta para los datos
data
, y con la clave pública
public_key
. Esta clave debe ser la clave
pública correspondiente a la clave privada utilizada durante la firma.
data
La cadena de datos utilizada para generar la firma
signature
Una cadena binaria bruta, generada por la función openssl_sign() o similar
public_key
OpenSSLAsymmetricKey - una clave, retornada por la función openssl_get_publickey()
string - una clave en formato PEM, por ejemplo: -----BEGIN PUBLIC KEY-----
MIIBCgK...
.
algorithm
int - una de las firmas de algoritmos.
string - una cadena válida retornada por la función openssl_get_md_methods(), por ejemplo: "sha1WithRSAEncryption" o "sha512". Algoritmo por omisión: "OPENSSL_ALGO_SHA1".
Retorna 1 si la firma es correcta, 0 si es
incorrecta y -1 o false
si ocurre un error.
Versión | Descripción |
---|---|
8.0.0 |
public_key acepta ahora una instancia de
OpenSSLAsymmetricKey o OpenSSLCertificate;
anteriormente, se aceptaba un recurso de tipo OpenSSL key o OpenSSL X.509 .
|
Ejemplo #1 Ejemplo con openssl_verify()
<?php
// Se asume que $data y $signature contienen los datos a firmar y
// la firma.
// Lectura de la clave pública desde el certificado
$pubkeyid = openssl_pkey_get_public("file://src/openssl-0.9.6/demos/sign/cert.pem");
// indica si la firma es correcta
$ok = openssl_verify($data, $signature, $pubkeyid);
if ($ok == 1) {
echo "Firma válida";
} elseif ($ok == 0) {
echo "Firma errónea";
} else {
echo "Error de verificación de la firma";
}
// libera las claves de la memoria
openssl_free_key($pubkeyid);
?>
Ejemplo #2 Ejemplo con openssl_verify()
<?php
//Datos que se desean firmar
$data = 'my data';
//Crea una nueva clave privada y pública
$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']);
//Crea una firma
openssl_sign($data, $signature, $private_key_res, "sha256WithRSAEncryption");
//Verifica la firma
$ok = openssl_verify($data, $signature, $public_key_res, OPENSSL_ALGO_SHA256);
if ($ok == 1) {
echo "válida";
} elseif ($ok == 0) {
echo "inválida";
} else {
echo "error: ".openssl_error_string();
}
?>