GNU/Linux >> LINUX-Kenntnisse >  >> Linux

base64 -d dekodiert, sagt aber ungültige Eingabe

Wenn Sie es umgekehrt machen, werden Sie feststellen, dass die Zeichenfolge nicht vollständig ist:

$ echo '{"foo":"bar","baz":"bat"}' | base64
eyJmb28iOiJiYXIiLCJiYXoiOiJiYXQifQo=

$ echo "eyJmb28iOiJiYXIiLCJiYXoiOiJiYXQifQo=" | base64 -di
{"foo":"bar","baz":"bat"}

Auszüge aus Warum erfordert die Base64-Codierung Auffüllungen, wenn die Eingabelänge nicht durch 3 teilbar ist?

Was sind Füllzeichen?

Füllzeichen helfen, die Längenanforderungen zu erfüllen, und haben keine Bedeutung.

Das Auffüllen ist jedoch in Situationen nützlich, in denen base64-codierte Zeichenfolgen so verkettet werden, dass die Länge der einzelnen Sequenzen verloren geht, wie dies beispielsweise in einem sehr einfachen Netzwerkprotokoll passieren kann.

Wenn nicht aufgefüllte Zeichenfolgen verkettet werden, ist es unmöglich, die ursprünglichen Daten wiederherzustellen, da Informationen über die Anzahl der ungeraden Bytes am Ende jeder einzelnen Sequenz verloren gehen. Wenn jedoch aufgefüllte Sequenzen verwendet werden, gibt es keine Mehrdeutigkeit, und die Sequenz als Ganzes kann korrekt dekodiert werden.


Das Befehlszeilentool ist wählerisch in Bezug auf das Vorhandensein von Füllzeichen. Dieser String ist 34 Zeichen lang, also sollte es zwei = geben Zeichen als Polsterung am Ende.

$ echo "eyJmb28iOiJiYXIiLCJiYXoiOiJiYXQifQ==" | base64 -di; echo
{"foo":"bar","baz":"bat"}

Linux
  1. Nohup-Befehl mit Eingabe ausführen?

  2. Das „Wenn“?

  3. Dd:Mehrere Eingabedateien?

  4. Ungültige ABI-Option abi=aapcs-linux

  5. postfix/dovecot sagt, dass die postmaster_address-Einstellung nicht gegeben ist, aber es ist

Emoji unter Linux eingeben

Network Manager sagt eingeschränkte Konnektivität, aber alles funktioniert

Eingabe-Ausgabe-Umleitung unter Linux erklärt

Ubuntu sagt 13.04, aber Lsb_release sagt 12.10?

Prozesssubstitution:Eine ungewöhnliche, aber fortschrittliche Methode zur Eingabe-/Ausgabeumleitung in Linux

firefox:Farbe des Eingabefeldes