Funciones de OpenSSL
PHP Manual

openssl_verify

(PHP 4 >= 4.0.4, PHP 5)

openssl_verifyVerificar una firma

Descripción

int openssl_verify ( string $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_resOPENSSL_ALGO_SHA1);
if (
$ok == 1) {
    echo 
"válida";
} elseif (
$ok == 0) {
    echo 
"no válida";
} else {
    echo 
"error: ".openssl_error_string();
}
?>

Ver también


Funciones de OpenSSL
PHP Manual