GNU/Linux >> Linux の 問題 >  >> Linux

base64 -d デコードしますが、無効な入力と表示されます

逆にすると、文字列が完全ではないことに気付くでしょう:

$ 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"}

Linux
  1. Grep:{}のコンテンツが無効ですか?

  2. Linux –参照しかしLinuxの場合?

  3. Zshで、完了をキャンセルしますが、完了のみですか?

  1. Dd:複数の入力ファイル?

  2. Python で文字列を難読化する

  3. 無効な pthread_t ID はありますか?

  1. 無効な ABI オプション abi=aapcs-linux

  2. ターミナルでのパスワード入力を隠す

  3. base64 のデコード:無効な入力