(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
openssl_sign — Erzeugt eine Signatur
$data
,&$signature
,$private_key
,$algorithm
= OPENSSL_ALGO_SHA1
Die Funktion openssl_sign() errechnet die Signatur für
die im Parameter data
angegebenen Daten, indem sie
unter Verwendung des privaten Schlüssels private_key
eine kryptographische digitale Signatur erzeugt. Es ist zu beachten, dass
die Daten selbst nicht verschlüsselt werden.
data
Die zu verschlüsselnden Daten.
signature
Nach erfolgreicher Ausführung wird die Signatur im Parameter
signature
zurückgegeben.
private_key
OpenSSLAsymmetricKey - ein von openssl_get_privatekey() zurückgegebener Schlüssel.
string - ein Schlüssel im PEM-Format.
algorithm
int - einer dieser Signatur-Algorithmen.
string - eine von openssl_get_md_methods() zurückgegebene gültige Zeichenkette, beispielsweise "sha256WithRSAEncryption" oder "sha384".
Version | Beschreibung |
---|---|
8.0.0 |
private_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_sign()-Beispiel
<?php
// Annahme: $data enthält die Daten, die signiert werden sollen
// holen und vorbereiten des privaten Schlüssels aus einer Datei
$pkeyid = openssl_pkey_get_private("file://src/openssl-0.9.6/demos/sign/key.pem");
// errechnen der Signatur
openssl_sign($data, $signature, $pkeyid);
// löschen des Schlüssels aus dem Speicher
openssl_free_key($pkeyid);
?>
Beispiel #2 openssl_sign()-Beispiel
<?php
// die zu verschlüssenlnden Daten
$data = 'my data';
// erzeuge einen neuen privaten und öffentlichen Schlüssel
$new_key_pair = openssl_pkey_new(array(
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
));
openssl_pkey_export($new_key_pair, $private_key_pem);
$details = openssl_pkey_get_details($new_key_pair);
$public_key_pem = $details['key'];
// erzeuge die Signatur
openssl_sign($data, $signature, $private_key_pem, OPENSSL_ALGO_SHA256);
// für spätere Verwendung speichern
file_put_contents('private_key.pem', $private_key_pem);
file_put_contents('public_key.pem', $public_key_pem);
file_put_contents('signature.dat', $signature);
// Signatur überprüfen
$r = openssl_verify($data, $signature, $public_key_pem, "sha256WithRSAEncryption");
var_dump($r);
?>