Antworten auf deine Fragen:
Neues Thema erstellen

PHP-Encoding-Frage

Hallo,

ich nutze base64_encode um einen String zu verschlüsseln. Das Problem ist, dass base64 eben auch "/" oder "+" oder "=" enthält. Das ist schlecht für die Weiterverarbeitung (und nein urlencode ist keine Lösung in meinem Fall). Zum Beispiel encode ich einen Dateinamen beim Dateiupload und dieser könnte dann ja auch "/" enthalten. Das würde den File-Upload fehlschlagen lassen. Also habe ich mich informiert über eine bessere Methode bas64_encode zu verwenden. Diese Funktionen sind das Ergebnis.
Code:
function base64_url_encode($input){return strtr(base64_encode($input),'+/=','-_,');}

function base64_url_decode($input){return base64_decode(strtr($input,'-_,','+/='));}
Die Funktion ersetzt also die Zeichen die ich nicht haben möchte, durch andere.
Dazu habe ich aber noch Bedenken:
  • Die Funktion kodiert ja z.B. "/" zu "_". Die Decode-Funktion macht das dann umgekehrt also wandelt "_" zu "/" um. Ich sehe das Problem dann darin, dass wenn wirklich einmal "_" in einem String enthalten ist, dann wird es ja auch zu "/" umgewandelt. Sind die Funktionen also überhaupt valide?
  • Ist die Implementierung dieser beiden Funktionen statt den nativen Funktionen überhaupt sinnvoll? Ich nutze base64_encode in einer encrypt-Funktion. Wenn jetzt ein Nutzer ein verschlüsseltes Passwort hat das eines der besagten Zeichen bereits beinhaltet, wird das zu Fehlern führen wenn ich auf die Funktionen umstelle?
  • Falls das Mist ist, was ist die Alternative um "/" in einem base64_encode-String zu vermeiden?
Danke & Gruß

Julian
 

Für die interne sichere Weiterverarbeitung. Im Prinzip wird aus dem String ein Key generiert mit einer encrypt Funktion die dann widerum base64_encode verwendet. Dieser Key kann als PW genutzt oder als Token o.Ä.
 
Intern heisst bei dir auf dem Server???
Oder meinst du vielleicht doch die Datenverschlüsselung zum Server??
Was hälst du von folgenden Funktionen?





oder das hier


mfg
 
Hallo,
Intern heisst bei dir auf dem Server???
Im Titel steht "PHP". PHP = Serverseitig!
Oder meinst du vielleicht doch die Datenverschlüsselung zum Server??
Nein, ich rede von base64_encode, einer PHP-Funktion! Meine Fragen sind oben genannt.
Was hälst du von folgenden Funktionen?





oder das hier
Es geht hier nicht um alternative Encrypt-Funktionen sondern um meine Fragen. Informier dich bitte mal über die Lücken von sha1 und md5 und PHP5.5 Encrypt-Funktionen. Dann wirst du schnell auf das Ergebnis kommen, dass diese Funktionen veraltet sind.. das nur by the way!
 
Hallo,

aber base64 ist ja gar keine Verschlüsselung! Es ist ja nur eine Umcodierung für den Transport von Daten über Medien, die nicht zwingend 8-Bit Zeichensätze oder mehr können.

Jedoch zurück zu Deiner Frage. Wie der Name "base64" schon sagt, werden 64 Zeichen aus der unteren Hälfte des Standard ASCII-Zeichensatzes verwendet. Also 64 Zeichen aus dem Bereich ASCII(0) bis ASCII(127). Man läßt natürlich zunächst mal die Zeichen für die Datenflußkontrolle weg ASCII(0) bis ASCII(31). Dann braucht man die 64 Zeichen für die base64 Codierung. Welche das sind steht im entsprechenden RFC drin ( ). Es bleiben also aus dem 7-Bit ASCII Zeichensatz 32 Zeichen übrig, die man verwenden kann um "/" etc. zu ersetzen.

Viele Grüße
Maba
 
Code:
   Each 6-bit group is used as an index into an array of 64 printable
   characters.  The character referenced by the index is placed in the
   output string.

                      Table 1: The Base 64 Alphabet

     Value Encoding  Value Encoding  Value Encoding  Value Encoding
         0 A            17 R            34 i            51 z
         1 B            18 S            35 j            52 0
         2 C            19 T            36 k            53 1
         3 D            20 U            37 l            54 2
         4 E            21 V            38 m            55 3
         5 F            22 W            39 n            56 4
         6 G            23 X            40 o            57 5
         7 H            24 Y            41 p            58 6
         8 I            25 Z            42 q            59 7
         9 J            26 a            43 r            60 8
        10 K            27 b            44 s            61 9
        11 L            28 c            45 t            62 +
        12 M            29 d            46 u            63 /
        13 N            30 e            47 v
        14 O            31 f            48 w         (pad) =
        15 P            32 g            49 x
        16 Q            33 h            50 y
 
Code:
         Table 2: The "URL and Filename safe" Base 64 Alphabet

     Value Encoding  Value Encoding  Value Encoding  Value Encoding
         0 A            17 R            34 i            51 z
         1 B            18 S            35 j            52 0
         2 C            19 T            36 k            53 1
         3 D            20 U            37 l            54 2
         4 E            21 V            38 m            55 3
         5 F            22 W            39 n            56 4
         6 G            23 X            40 o            57 5
         7 H            24 Y            41 p            58 6
         8 I            25 Z            42 q            59 7
         9 J            26 a            43 r            60 8
        10 K            27 b            44 s            61 9
        11 L            28 c            45 t            62 - (minus)
        12 M            29 d            46 u            63 _
        13 N            30 e            47 v           (underline)
        14 O            31 f            48 w
        15 P            32 g            49 x
        16 Q            33 h            50 y         (pad) =

Die beiden Blöcke kommen direkt aus dem RFC. Wie man sieht, ist die Korrekte Vorgehensweise "+" durch "-" und "/" durch "_" zu ersetzen.

Gruß
Maba
 
Ich habe das Gefühl, dass ihr meine Fragen nicht durchlest, deshalb nochmal:
  • Sind die Funktionen also überhaupt valide?
  • Ist die Implementierung ohne Komplikationen möglich?
  • Falls nein, was wäre die Alternative?
 
Wie oben beschrieben, ja - die Funktionen sind valide und führen auch nicht zu irgendwelchen Veränderungen an den Daten. Die Umcodierung des "=" Zeichens ist nach Standard nicht einmal notwendig.

Maba
 
Code:
function base64_url_encode($input){return strtr(base64_encode($input),'+/','-_');}

function base64_url_decode($input){return base64_decode(strtr($input,'-_','+/'));}

Maba
 
Ich habe das Gefühl, dass ihr meine Fragen nicht durchlest, deshalb nochmal:
  • Sind die Funktionen also überhaupt valide?
  • Ist die Implementierung ohne Komplikationen möglich?
  • Falls nein, was wäre die Alternative?
Zu 1: die Frage ist unvollständig. Valide für was?
  • PHP-Syntax ist in Ordnung
  • Die Funktionen sind korrekt insofern als sie eine korrekte base64 Codierung / Decodierung durchführen
  • Die Funktionen führen nicht zu Datenverlust oder Datenveränderung
  • Die Funktionen sind "FileSystem" sicher
  • Die Funktionen verschlüsseln nichts (falls es also um die Absicherung von irgendwas geht, dann sind die Funktionen nicht valide)
Zu 2:
  • offensichtlich. Die Funktionen sind einfach genug. Wo sollte die Komplikation herkommen?
Zu 3:
  • Siehe 1. Falls der letzte Aspekt (Absicherung) keine Rolle spielt, dann brauchst Du keine Alternative. Falls es um Absicherung geht würde ich die OpenSSL Funktionen verwenden. Diese bieten das komplette kryptographische Repertoir.

Maba
 
offensichtlich. Die Funktionen sind einfach genug. Wo sollte die Komplikation herkommen?
Hallo,

vielen Dank für deine Antwort. Das ist erstmal sehr hilfreich!
Was genau ich meine: Ich nutze eine Encode (und Decode)-Funktion die zu jedem Character eines übergenenen Strings mithilfe eines Keys, ein bestimmtes ASCII-Zeichen nimmt und es mit base64_encode kodiert. Dann ergibt sich ein Hash, der wieder mit dem Key entschlüsselt werden kann. Wenn ich jetzt also die base64_encode Funktion durch oben genannte ersetze, ist es ja möglich, dass meine Decode-Funktion zukünftig die Strings anders verschlüsselt, wenn sich dort die genannten Zeichen befinden. Das würde dann ja zu Komplikationen führen, richtig?
Das ist auch der eigentliche Grund weshalb ich momentan unentschlossen bin, das einzusetzen. Was wäre denn eine Möglichkeit die Ersetzung trotzdem durchzuführen, ohne dass es zu Komplikationen kommt (falls überhaupt)?
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Statistik des Forums

Themen
118.969
Beiträge
1.540.177
Mitglieder
68.167
Neuestes Mitglied
allVCList
Oben