openssl_encrypt
(PHP 5 >= 5.3.0, PHP 7)
openssl_encrypt — Verschlüsselt Daten
Beschreibung
$data
, string $method
, string $key
[, int $options
= 0
[, string $iv
= ""
[, string &$tag
= NULL
[, string $aad
= ""
[, int $tag_length
= 16
]]]]] ) : stringVerschlüsselt die Daten mit der angegebenen Methode und Schlüssel. Die Rückgabe kann aus unbearbeiteten oder base64 kodierten Zeichenketten bestehen.
Parameter-Liste
-
data
-
Die zu verschlüsselnde Klartextnachricht.
-
method
-
Verschlüsselungsmethode. openssl_get_cipher_methods() liefert eine Liste der verfügbaren Verschlüsselungsmethoden.
-
key
-
Der Schlüssel.
-
options
-
options
ist eine Bitmaske ausOPENSSL_RAW_DATA
undOPENSSL_ZERO_PADDING
. -
iv
-
Initialisierungsvektor (darf nicht NULL sein).
-
tag
-
Das Authentifizierungskennzeichen das per Reference übergeben wird, wenn der AEAD Verschlüsselungsmodus (GCM oder CCM) verwendet wird.
-
aad
-
Zusätzliche Authentifizierungsdaten.
-
tag_length
-
Die Länge des Authentifizierungskennzeichens (
tag
). Der Wert liegt zwischen 4 und 16 für den GCM-Modus.
Rückgabewerte
Gibt nach erfolgreicher Verarbeitung die verschlüsselte Zeichenkette zurück. Im Fehlerfall wird FALSE
zurückgegeben.
Fehler/Exceptions
Gibt einen E_WARNING
Fehler aus, wenn eine unbekannte Verschlüsselungsmethode
über den method
Parameter übergeben wurde.
Gibt einen E_WARNING
Fehler aus, wenn eine leere Zeichenkette
über den iv
Parameter übergeben wurde.
Changelog
Version | Beschreibung |
---|---|
7.1.0 |
Die tag , aad und
tag_length Parameter wurden hinzugefügt.
|
5.4.0 |
Der raw_output wurde geändert zu options .
|
5.3.3 |
Der iv wurde hinzugefügt.
|
Beispiele
Beispiel #1 AES Authenticated Encryption im GCM-Modus Beispiel für PHP 7.1+
<?php
// $key sollte zuvor auf eine kryptographisch sichere Weise erzeugt worden sein, z.B. per openssl_random_pseudo_bytes
$plaintext = "zu verschlüsselnde Nachricht";
$cipher = "aes-128-gcm";
if (in_array($cipher, openssl_get_cipher_methods()))
{
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext = openssl_encrypt($plaintext, $cipher, $key, $options=0, $iv, $tag);
// speichere $cipher, $iv und $tag für spätere Entschlüsselung
$original_plaintext = openssl_decrypt($ciphertext, $cipher, $key, $options=0, $iv, $tag);
echo $original_plaintext."\n";
}
?>
Beispiel #2 AES Authenticated Encryption Beispiel für PHP 5.6+
<?php
// $key sollte zuvor auf eine kryptographisch sichere Weise erzeugt worden sein, z.B. per openssl_random_pseudo_bytes
$plaintext = "zu verschlüsselnde Nachricht";
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext_raw = openssl_encrypt($plaintext, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
$hmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true);
$ciphertext = base64_encode( $iv.$hmac.$ciphertext_raw );
// spätere Entschlüsselung ...
$c = base64_decode($ciphertext);
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = substr($c, 0, $ivlen);
$hmac = substr($c, $ivlen, $sha2len=32);
$ciphertext_raw = substr($c, $ivlen+$sha2len);
$original_plaintext = openssl_decrypt($ciphertext_raw, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
$calcmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true);
if (hash_equals($hmac, $calcmac)) // PHP 5.6+ Rechenzeitangriff-sicherer Vergleich
{
echo $original_plaintext."\n";
}
?>
Deutsche Übersetzung
Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.
Vielen Dank im Voraus.
Dokument erstellt 30/01/2003, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/php-rf-openssl-encrypt.html
Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.
Referenzen
Diese Verweise und Links verweisen auf Dokumente, die während des Schreibens dieser Seite konsultiert wurden, oder die zusätzliche Informationen liefern können, aber die Autoren dieser Quellen können nicht für den Inhalt dieser Seite verantwortlich gemacht werden.
Der Autor Diese Website ist allein dafür verantwortlich, wie die verschiedenen Konzepte und Freiheiten, die mit den Nachschlagewerken gemacht werden, hier dargestellt werden. Denken Sie daran, dass Sie mehrere Quellinformationen austauschen müssen, um das Risiko von Fehlern zu reduzieren.