Linux

base64 -d 解碼,但輸入無效

  • August 25, 2021

有誰知道為什麼會發生這種情況以及如何解決它?

me@box:~$ echo "eyJmb28iOiJiYXIiLCJiYXoiOiJiYXQifQ" | base64 -di
{"foo":"bar","baz":"bat"}base64: invalid input

如果你反過來,你會注意到字元串不完整:

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

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

如果輸入長度不能被 3 整除,為什麼 base64 編碼需要填充?

什麼是填充字元?

填充字元有助於滿足長度要求並且沒有任何意義。

但是,填充在 base64 編碼字元串以這樣的方式連接的情況下很有用,即單個序列的長度會失去,例如,在一個非常簡單的網路協議中可能會發生這種情況。

如果連接未填充的字元串,則無法恢復原始數據,因為有關每個單獨序列末尾的奇數字節數的資訊會失去。但是,如果使用填充序列,則沒有歧義,並且可以正確解碼整個序列。

引用自:https://unix.stackexchange.com/questions/631501