(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.
dataLa cadena de datos utilizada para generar la firma
signatureUna cadena binaria bruta, generada por la función openssl_sign() o similar
public_keyOpenSSLAsymmetricKey - una clave, retornada por la función openssl_get_publickey()
string - una clave en formato PEM, por ejemplo: -----BEGIN PUBLIC KEY-----
MIIBCgK....
algorithmint - 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 resource 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();
}
?>