• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

openssl_encrypt

Hallo-Welt

Aktives Mitglied
Hi,

Ich wollte aus Sicherheitsgründen den Content in der MySQL-DB verschlüsseln, und dachte dafür die PHP-interne Funktion openssl_encrypt zu nutzen. Doch mach ich mich zurzeit schwer, dem Handbuch zu folgen. Denn ich bekam unter ausführen des in den UCNs hinterlegten Beispiels
PHP:
$string = 'It works ? Or not it works ?';
$pass = '1234';
$method = 'aes128';
echo openssl_encrypt($string, $method, $pass);
folgende Warnung von PHP zurück:
Code:
Warning: openssl_encrypt() [function.openssl-encrypt]: Using an empty Initialization Vector (iv) is potentially insecure and not recommended on line 5
YGYj+ysu5u9UigVwb2xbcmRmyFSgPeoKmg6q1etG7wA=
Hab dann nochmal in der Dokumentation nachgesehen und tatsächlich, da fehlen noch zwei Parameter, einmal $options (int) und einmal $iv (String).
Das erste ist entweder 0 oder 1, wobei ich mich für 0 entschieden habe, da ich bei 1 sowas wie
Code:
`f#�+.��T�pol[rdf�T�=� ����F�
als String zurückbekomme.

Aber was soll ich beim letzten Parameter eintragen? In der Doku steht nur
A non-NULL Initialization Vector.
ohne Beispiel und irgendwas. Dann hab ich halt irgendein String übergeben und bekam als Warnung diesesmal prompt
Code:
Warning: openssl_encrypt() [function.openssl-encrypt]: IV passed is only 2 bytes long, cipher expects an IV of precisely 16 bytes, padding with \0 on line 5
zurück.
Also übergab ich als String "abcdefghijklmnop", und da klappte es auch ganz ohne Warnung. Aber warum zum Teufel braucht die Funktion diesen Parameter? Und was sollte idealerweise an ihn übergeben werden (also einfach irgendwas, oder eine Zufallszahl, oder was???)?
 
Okay, danke für den Link. Aber wenn ich den Wert ebenfalls für die Entschlüsselung benötige, dann erschließt sich mir nicht ganz dessen Sinn. Denn ich müsste ihn dann ebenfalls in der DB abspeichern, was sinnlos wäre, da ja ebenfalls der verschlüsselte String dort liegt und ein Angreifer in jedem Fall auf beides Zugang hätte. Macht es denn überhaupt Sinn diesen Parameter zu übergeben, bzw. erschaffe ich Sicherheitslücken, wenn ich ihn weglasse und die Warnung einfach mit einem vorangehängten @ unterdrücke?
 
Zurück
Oben