Warum setzt mcrypt_encrypt () binäre Zeichen am Ende meiner Zeichenkette?

8

Hier ist ein PHP-Demo-Skript, das Daten verschlüsselt und entschlüsselt:

%Vor%


Die Ausgabe ist:

%Vor%


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?

    
davidjhp 20.03.2012, 05:30
quelle

4 Antworten

8

Die zurückgegebene Zeichenfolge wird aufgefüllt, um n * blocksize bytes mit dem Nullzeichen $card_nbr_decrypted= rtrim($card_nbr_decrypted, "%code%"); zu füllen, daher sehen Sie die zusätzlichen Daten.

Wenn Sie %code% ausführen, sollten die tatsächlichen Daten zurückgegeben werden.

    
drew010 20.03.2012, 05:40
quelle
3

Es scheint ein bekanntes Problem zu sein. Verwenden Sie rtrim() nach dem Dekodieren, um die überschüssigen NULs zu entfernen.

    
Ignacio Vazquez-Abrams 20.03.2012 05:40
quelle
2

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.

    
Mark Fox 02.11.2013 01:49
quelle
-1

Ich denke, das Problem ist, dass Sie binäre Daten verwenden, wenn:

mcrypt_encrypt - Verschlüsselt den Klartext mit den angegebenen Parametern

Sie können base64_encode ($ text) für die Verwendung von Klartext verwenden.

    
bLuEdDy 03.11.2014 16:07
quelle

Tags und Links