Kann eine base64-codierte Zeichenfolge Leerzeichen enthalten?
Lesezeit: 5 Minuten
Dougal
Kann eine base64-codierte Zeichenfolge Leerzeichen enthalten? Könnte es insbesondere Leerzeichen am enthalten Ende der Saite?
PS. Ich denke hier an das ganze “MySQL kürzt nachgestellte Leerzeichen beim Speichern von Zeichenfolgen in VARCHAR-Feldern” 😉
Vielleicht meine ich “macht” mehr als “kann” 😉
– Dougal
22. Juni 2010 um 16:07 Uhr
Nun, Sie können je nach Implementierung Leerzeichen hinzufügen, aber meistens werden sie einfach entfernt, da sie tatsächlich gültig sind, da sie nicht Teil des b64-“Alphabets” sind, sondern häufig zu Anzeigezwecken enthalten sind. “Lesbarkeit” trifft es nicht wirklich, weil eine “normal „Der Mensch kann überhaupt keine b64-Strings lesen
– Mein1
23. Februar 2016 um 10:17 Uhr
Nein kann es nicht. Sehen Base64 für das zulässige Zeichen-Repository, das von verwendet wird base64das sind die Charaktere A-Z, a-z, 0-9, + und / (die letzten beiden können je nach Implementierung unterschiedlich sein) sowie das Füllzeichen = (Aber das ist auch implementierungsabhängig, da einige Implementierungen überhaupt kein Padding verwenden).
ja, sie gehören nicht zum Code, aber in den meisten Implementierungen können sie hinzugefügt werden, um die Lesbarkeit zu erhalten. Die meisten Decoder ignorieren Leerzeichen.
– Jigfox
22. Juni 2010 um 10:18 Uhr
Ja, das stimmt, aber dann sind sie für die codierte Zeichenfolge nicht von Bedeutung, was bedeutet, dass sie getrost ignoriert werden können und es keine Rolle spielt, ob MySQL oder wer auch immer sie entfernt. Die Absicht des OP ist offensichtlich zu speichern base64-codierte Zeichenfolgen in einem MySQL VARCHAR Spalte, die absolut sicher ist.
– Stefan Gehrig
22. Juni 2010 um 10:51 Uhr
Danke Leute, ich meinte mehr “enthält” eine base64-Zeichenfolge Leerzeichen – nicht “kann” – meine Schuld. Zusammenfassend kann es also sein, aber sie sind irrelevant. 🙂 Ich verstehe es jetzt
– Dougal
22. Juni 2010 um 16:09 Uhr
Für die Zeichenfolge “apfjxkic-omyuobwd339805ak:60a06cd2ddfad610b9490d359d605407” würde Base 64 ein “\n” ausgeben, ich weiß nicht warum
– Tina
3. Juli 2017 um 4:59 Uhr
Wie Gavin Jackson unten erwähnt, wenn Sie einen unerwarteten Platz in Ihrem haben base64 string, dann ist es höchstwahrscheinlich das Ergebnis der URL-Analyse, die dies von a konvertiert + zu einem weißen Raum. Eine einfache $str = str_replace(' ', '+', $str) bevor du base64_decode($str) wird es lösen.
– Ei
27. Juli 2017 um 12:24 Uhr
Gavin Jackson
Es sollte nicht, aber es könnte tun.
Ein gültiger base64-String sollte keine Leerzeichen enthalten, da das Codierungsalphabet nur aus AZ az 0-9 + / bestehen sollte.
Wenn die verschlüsselten Daten jedoch zufällig ein „+“-Zeichen enthalten und die Daten in einer URL übergeben werden, können sie unbeabsichtigt in ein Leerzeichen umgewandelt werden. Unter diesen Umständen kann es also vorkommen, dass Sie auf eine vermeintliche base64-Zeichenfolge stoßen, die Leerzeichen zu enthalten scheint.
Wenn dies der Fall ist, ersetzen Sie vor dem Decodieren einfach Leerzeichen durch Pluszeichen.
PS. Ich denke hier über das ganze “MySQL kürzt nachgestellte Leerzeichen beim Speichern von Zeichenfolgen in VARCHAR-Feldern” nach
Abgesehen davon werden die abschließenden Leerzeichen eines Varchars ab MySQL 5.0.3 nicht mehr einfach entfernt
Dies sollte jedoch kein Problem sein, wenn Sie einen URL-sicheren Base64-Codierungsalgorithmus verwenden 🙂
– Ren
31. Oktober 2012 um 15:24 Uhr
+1 für die Erwähnung des ‘+’/Leerzeichen-Problems. Hatte gerade eine URL mit Base64-String geliefert, wobei die + in Leerzeichen umgewandelt wurden.
– Weg Codierung
14. Januar 2014 um 16:12 Uhr
Ich wurde verrückt mit diesem. Vielen Dank!
– Everton Lenger
2. März 2017 um 18:55 Uhr
Ich hatte ein Leerzeichen in der base64-Zeichenfolge (als Ergebnis der json-Codierung/Decodierung), das dieser Beitrag für mich aufgelöst hat. Dies sollte in der akzeptierten Antwort erwähnt werden, daher werde ich eine Änderung vorschlagen, um dies aufzunehmen.
– Ei
26. Juli 2017 um 11:51 Uhr
Ja. Eine Base64-codierte Zeichenfolge kann Leerzeichen enthalten, aber die Zeichen sind nicht signifikant. Es ist also in Ordnung, wenn die Datenbank Leerzeichen entfernt.
Tatsächlich empfiehlt die ursprüngliche MIME-Spezifikation, Base64-Strings in Zeilen mit 72 Zeichen aufzuteilen. base64Binary von XML kann auch Zeilenumbrüche, Tabulatoren und Leerzeichen enthalten.
Bei PHP, base64_decode() entfernt alle Leerzeichen, sodass Sie sich darüber keine Gedanken machen müssen.
Wikipedia schlägt vor, dass es eine Unmenge von Variationen der Base64-Codierung gibt:
Die Antwort hängt also wahrscheinlich davon ab, was Sie mit der Zeichenfolge tun müssen. Aber ich wage zu sagen, dass Sie in PHP mit base64_encode() erstellt haben, sodass es sicher zu sein scheint, Leerzeichen anzuhängen:
<?php
$original_data="Lorem ipsum dolor sit amet";
$encoded_data = base64_encode($original_data);
$padded_data=" " . chunk_split($encoded_data, 3, ' ') . ' ';
echo base64_decode($padded_data); // Prints 'Lorem ipsum dolor sit amet'
?>
Soweit ich weiß kann es das nicht. Grundsätzlich muss ein Base64-String aus einer Menge von 64 Zeichen aufgebaut werden. AZ, az, 0-9 ergeben 62 – die anderen beiden hängen von der Implementierung ab.
Basierend auf dem, was ich weiß, gibt es jetzt eine Implementierung, die Leerzeichen als Zeichen verwendet. Der Hauptgrund dafür ist die Lesbarkeit – dh ein Base64-String muss leicht gedruckt und erkannt werden.
Wahrscheinlich finden Sie weitere Informationen dazu auf Wikipedia.
Mcw
Nein, aber – einige Implementierungen der base64 fügt der Ausgabe Zeilenumbrüche hinzu, wodurch es so aussehen kann, als wären Leerzeichen Teil der Ausgabe. Wenn Sie auf diesen Fall stoßen, abhängig von Ihrer Version von base64können Sie dieses Verhalten entweder deaktivieren oder Zeilenumbruchzeichen entfernen, indem Sie einen der folgenden Schritte ausführen:
Vielleicht meine ich “macht” mehr als “kann” 😉
– Dougal
22. Juni 2010 um 16:07 Uhr
Nun, Sie können je nach Implementierung Leerzeichen hinzufügen, aber meistens werden sie einfach entfernt, da sie tatsächlich gültig sind, da sie nicht Teil des b64-“Alphabets” sind, sondern häufig zu Anzeigezwecken enthalten sind. “Lesbarkeit” trifft es nicht wirklich, weil eine “normal „Der Mensch kann überhaupt keine b64-Strings lesen
– Mein1
23. Februar 2016 um 10:17 Uhr