Hier ist ein PHP-Demo-Skript, das Daten verschlüsselt und entschlüsselt:
%Vor%
Die Ausgabe ist:
Die Ausgabe wird erfolgreich entschlüsselt, aber am Ende werden 28 Binärzeichen hinzugefügt. Dies kann am einfachsten in Firefox angezeigt werden, wenn HTML-Quelle angezeigt wird.
Die String-Länge von 32 zeigt dies auch. Irgendwelche Ideen?
Die zurückgegebene Zeichenfolge wird aufgefüllt, um n * blocksize
bytes mit dem Nullzeichen
zu füllen, daher sehen Sie die zusätzlichen Daten. $card_nbr_decrypted= rtrim($card_nbr_decrypted, "%code%");
Wenn Sie %code% ausführen, sollten die tatsächlichen Daten zurückgegeben werden.
Es scheint ein bekanntes Problem zu sein. Verwenden Sie rtrim()
nach dem Dekodieren, um die überschüssigen NULs zu entfernen.
Sie erhalten null Bytes, weil Sie Electronic Code Block (ECB) für Ihren Block verwenden Verschlüsselungsmodus , der das Ende Ihres Klartexts auf die Blockgröße aufträgt. In Ihrem Fall beträgt die Blockgröße 256 Bit, weil Sie MCRYPT_RIJNDAEL_256
verwenden.
Sie können dieses Auffüllproblem zusammen vermeiden, wenn Sie Cipher Feedback (CFB) -Modus verwenden - MCRYPT_MODE_CFB
- keine Nullbytes, keine Trimmung erforderlich. Aber mit CFB sollten Sie Ihre verschlüsselten Daten HMAC HMAC verschlüsseln "http://www.pvv.ntnu.no/~asgaut/crypto/thesis/node16.html"> (siehe" Mallet ") . Ein Beispiel für eine funktionierende Implementierung finden Sie unter: Kryptographie für den durchschnittlichen Entwickler .
Bemerkenswert ist auch, dass der EZB-Modus als weniger sicher gilt, weil er zeigt Datenmuster an . Plus, EZB (und CBC, da es auch Pads) kann anfällig für Polsterung Orakel-Angriff sein.
Tags und Links php encryption mcrypt