Skip to main content

Base64エンコーディングのしくみ

0227 11 Base64编码原理 (六月 2025)

0227 11 Base64编码原理 (六月 2025)
Anonim

インターネットが情報のハイウェイである場合、電子メールの経路は狭い渓谷です。非常に小さなカートだけが通ることができます。

電子メールの転送システムは、単純なASCIIテキスト用に設計されています。他の言語や任意のファイルでテキストを送信しようとするのは、トラックを渓谷に通すようなものです。

ビッグトラックは渓谷をどのように通過するのですか?

それでは、小さな渓谷に大きなトラックをどのように送りますか?あなたは片方の端に小片を持って行き、小片を渓谷に運び、反対側の小片からトラックを再建しなければなりません。

電子メールで添付ファイルを送信する場合も同じことが起こります。エンコーディングとして知られているプロセスでは、バイナリデータはASCIIテキストに変換され、問題なく電子メールで転送されます。受信者側では、データがデコードされ元のファイルが再構築されます。

任意のデータをプレーンなASCIIテキストとしてエンコードする1つの方法は、Base64です。これは、プレーンテキスト以外のデータを送信するためにMIME標準で採用されている手法の1つです。

レスキューへのBase64

Base64エンコーディングは、それぞれが8ビットからなる3バイトをとり、ASCII標準で4つの印字可能文字として表します。それは本質的に2つのステップで行います。

最初のステップは、3バイトを4つの6ビット数に変換することです。 ASCII標準の各文字は7ビットで構成されています。 Base64は6ビット(2 ^ 6 = 64文字に対応)を使用して、エンコードされたデータが印刷可能で人間が読めるようにします。 ASCIIで使用可能な特殊文字は使用されません。

64文字(したがってBase64という名前)は、10桁、26個の小文字、26個の大文字、 '+'と '/'です。

例えば、3バイトが155,162および233である場合、対応する(および恐ろしい)ビットストリームは100110111010001011101001であり、これは6ビット値38,58,11および41に対応する。

これらの数値は、Base64エンコーディングテーブルを使用して2番目の手順でASCII文字に変換されます。この例の6ビットの値は、ASCIIシーケンス "m6Lp"に変換されます。

  • 155 -> 10011011
  • 162 -> 10100010
  • 233 -> 11101001
  • 100110 -> 38
  • 111010 -> 58
  • 001011 -> 11
  • 101001 -> 41
  • 38 - > m
  • 58 -> 6
  • 11→L
  • 41 - > p

この2つのステップのプロセスは、エンコードされたバイトシーケンス全体に適用されます。エンコードされたデータが正しく印刷され、メールサーバーの行長制限を超えないように、行の長さを76文字以下に保つために改行文字が挿入されます。改行文字は他のすべてのデータと同様にエンコードされます。

エンドゲームを解決する

エンコード処理の最後に、問題が発生する可能性があります。バイト単位の元のデータのサイズが3の倍数であれば、すべて正常に動作します。そうでない場合は、1つまたは2つの8ビットバイトで終わる可能性があります。適切なエンコーディングのためには、正確に3バイト必要です。

解決方法は、3バイトのグループを作成するのに十分なバイトに「0」の値を追加することです。 1つの余分なバイトのデータがある場合、そのような2つの値が追加されます.1つは追加の2つのバイトに追加されます。

もちろん、これらの人工の末尾の '0'は、以下のエンコードテーブルを使用してエンコードすることはできません。それらは65番目の文字で表されなければなりません。

Base64のパディング文字は '='です。当然のことながら、それは符号化されたデータの最後にしか現れません。

Base64エンコーディングテーブル

チャー チャー チャー チャー
0A 16Q 32g 48w
1B 17R 33h 49バツ
2C 18S 34 50y
3D 19T 35j 51z
4E 20U 36k 520
5F 21V 37l 531
6G 22W 38m 542
7H 23バツ 39n 553
8 24Y 40o 564
9J 25Z 41p 575
10K 26a 42q 586
11L 27b 43r 597
12M 28c 44s 608
13N 29d 45t 619
14O 30e 46あなた 62+
15P 31f 47v 63/