逆にすると、文字列が完全ではないことに気付くでしょう:
$ echo '{"foo":"bar","baz":"bat"}' | base64
eyJmb28iOiJiYXIiLCJiYXoiOiJiYXQifQo=
$ echo "eyJmb28iOiJiYXIiLCJiYXoiOiJiYXQifQo=" | base64 -di
{"foo":"bar","baz":"bat"}
入力の長さが 3 で割り切れない場合、base64 エンコードにパディングが必要なのはなぜですか?
<ブロック引用>埋め込み文字とは
パディング文字は、長さの要件を満たすのに役立ちますが、意味を持ちません。
ただし、パディングは、たとえば非常に単純なネットワーク プロトコルで発生する可能性があるように、base64 でエンコードされた文字列が連結されて個々のシーケンスの長さが失われる場合に役立ちます。
パディングされていない文字列が連結されている場合、個々のシーケンスの最後にある奇数バイト数に関する情報が失われるため、元のデータを復元することは不可能です。ただし、パディングされたシーケンスを使用すると、あいまいさがなくなり、シーケンス全体を正しくデコードできます。
コマンドライン ツールは、パディング文字の存在についてうるさいです。この文字列は 34 文字なので、=
が 2 つあるはずです。 最後にパディングとして署名します。
$ echo "eyJmb28iOiJiYXIiLCJiYXoiOiJiYXQifQ==" | base64 -di; echo
{"foo":"bar","baz":"bat"}