(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
openssl_verify — Überprüft eine Signatur
$data
,$signature
,$public_key
,$algorithm
= OPENSSL_ALGO_SHA1
Die Funktion openssl_verify() überprüft die Korrektheit
der Signatur signature
für die angegebenen Daten
data
mit Hilfe des öffentlichen Schlüssels
public_key
. Dieser muss der zum privaten Schlüssel
passende öffentliche sein, der für die Signatur verwendet wurde.
data
Die Zeichenkette der Daten, mit denen die Signatur zuvor erzeugt wurde.
signature
Eine rohe binäre Zeichenkette, erzeugt durch openssl_sign() oder ähnliche Mittel.
public_key
OpenSSLAsymmetricKey - ein von openssl_get_publickey() zurückgegebener Schlüssel.
string - ein PEM-formatierter Schlüssel
(z. B. -----BEGIN PUBLIC KEY----- MIIBCgK...
).
algorithm
int - einer dieser Signatur-Algorithmen.
string - eine von openssl_get_md_methods() zurückgegebene gültige Zeichenkette, beispielsweise "sha1WithRSAEncryption" oder "sha512".
Gibt bei einer korrekten Signatur 1 zurück, 0 bei einer unkorrekten und -1
oder false
, falls ein Fehler aufgetreten ist.
Version | Beschreibung |
---|---|
8.0.0 |
public_key akzeptiert nun eine
OpenSSLAsymmetricKey- oder
OpenSSLCertificate-Instanz; vorher wurde eine
Ressource vom Typ OpenSSL-Schlüssel oder
OpenSSL X.509 akzeptiert.
|
Beispiel #1 openssl_verify()-Beispiel
<?php
// Annahme: $data und $signature enthalten die Daten und die Signatur
// holen des öffentlichen Schlüssels aus dem Zertifikat und vorbereiten
$pubkeyid = openssl_pkey_get_public("file://src/openssl-0.9.6/demos/sign/cert.pem");
// feststellen, ob die Signatur ok ist oder nicht
$ok = openssl_verify($data, $signature, $pubkeyid);
if ($ok == 1) {
echo "gut";
} elseif ($ok == 0) {
echo "schlecht";
} else {
echo "Mist, Fehler beim überprüfen der Signatur";
}
// Löschen des Schlüssels aus dem Speicher
openssl_free_key($pubkeyid);
?>
Beispiel #2 openssl_verify()-Beispiel
<?php
// die zu signierenden Daten
$data = 'my data';
// erzeuge neuen privaten und öffentlichen Schlüssel
$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']);
// erzeuge Signatur
openssl_sign($data, $signature, $private_key_res, "sha256WithRSAEncryption");
// überprüfe Signatur
$ok = openssl_verify($data, $signature, $public_key_res, OPENSSL_ALGO_SHA256);
if ($ok == 1) {
echo "gültig";
} elseif ($ok == 0) {
echo "ungültig";
} else {
echo "Fehler: ".openssl_error_string();
}
?>