Kann eine base64-codierte Zeichenfolge Leerzeichen enthalten?

Lesezeit: 5 Minuten

Benutzer-Avatar
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


Benutzer-Avatar
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:

http://en.wikipedia.org/wiki/Base64

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.

Benutzer-Avatar
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:

base64 -w 0 < input.txt
base64 < input | tr -d \\n

Weitere Informationen finden Sie in dieser Frage: https://superuser.com/questions/1225134/why-does-the-base64-of-a-string-contain-n/1225334

1175020cookie-checkKann eine base64-codierte Zeichenfolge Leerzeichen enthalten?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy