Base64は最後にゼロを含むバイナリデータをどのように処理しますか

StackOverflow https://stackoverflow.com/questions/246548

  •  05-07-2019
  •  | 
  •  

質問

仕様を理解したように、Base64エンコーダー

a)ソースバイナリを取得し、24バイトの倍数になるようにゼロを埋め込みます。

b)次に、一度に6ビットずつ、64文字のターゲットセット(A..Z、a..z、0..9、+、-)にトランスコードします。最後の2バイト(16ビット)にゼロが埋め込まれていることが検出された場合、最後の2文字は「==」としてトランスコードされます。最後の1バイト(8ビット)にゼロが埋め込まれていることがわかると、最後の文字は「=」としてトランスコードされます。

ステップ(b)で、最後のバイトがパディングされているためゼロであるのに対し、有効なバイナリソースデータの一部であるためゼロであることがどのようにわかりますか?

パート(b)を担当するサブシステムは、パート(a)で何が起こったのかを知る必要があるのですか

役に立ちましたか?

解決

エンコーダー(デコーダーではなく)は、入力データの長さを認識し、何も出力しないかどうかを判断できます" ="または" =="最後に。あなたの質問は、あなたが言及した2つの段階の間につながりがないことを前提としていますが、私が見た実装ではそうではありません。

入力ストリームから6ビットグループを1つずつ抽出し、毎回byteCountをインクリメントするルーチンがあるため、書き込みに必要な実装では、最初の段階はまったく行われませんでした。最後に、式" byteCount%3 "出力ストリームに追加する文字列を決定するために使用されました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top