openssl_verify
(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
openssl_verify — Überprüft eine Signatur
Beschreibung
string
$data
,string
$signature
,OpenSSLAsymmetricKey|OpenSSLCertificate|array|string
$public_key
,string|int
$algorithm
= OPENSSL_ALGO_SHA1
): int|false
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.
Parameter-Liste
-
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 von diesen Signatur-Algorithmen.
string - eine von openssl_get_md_methods() zurückgegebene gültige Zeichenkette, beispielsweise "sha1WithRSAEncryption" oder "sha512".
Rückgabewerte
Gibt bei einer korrekten Signatur 1 zurück, 0 bei einer unkorrekten und -1
oder false
, falls ein Fehler aufgetreten ist.
Changelog
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.
|
Beispiele
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();
}
?>