web-dev-qa-db-ja.com

Base64エンコードの本当の目的は何ですか?

なぜBase64エンコーディングがあるのですか?私は初心者であり、バイトを他のものに難読化する理由を本当に理解していません(暗号化でない限り)。私がBase64エンコーディングを読んだ本の1つでは、バイナリ伝送が不可能なときに役立ちます。例えば。フォームを投稿すると、エンコードされます。しかし、なぜバイトを文字に変換するのですか?バイトを文字列形式に変換することはできませんか?例えば、 00000001 00000004?または単に0000000100000004バイトは常に8のペアになるため、スペースはありませんか?

66
Jack

Base64は、バイナリデータをASCIIほとんどすべてのコンピューターシステムに知られている文字セットにエンコードする方法で、コンテンツ自体の損失や変更なしにデータを送信します。たとえば、メールシステムASCII(テキスト)データを期待しているため、バイナリデータを処理できません。画像または別のファイルを転送する場合、データの処理方法が原因で破損します。

注:base64エンコードは、暗号化の方法でも、データの圧縮の方法でもありません。実際、base64でエンコードされたデータは、元のデータピースの1.333倍の大きさです。これは、転送中にデータが失われたり変更されたりしないようにするための唯一の方法です。

80
giorgio

Base64は、印刷可能な文字のみを許可するメディア上でバイナリデータを表現および転送できるようにするメカニズムです。「Base Encoding」の最も一般的な形式であり、他の使用方法はBase16およびBase32です。

Base64の必要性は、画像、ビデオ、または任意のバイナリコンテンツなどの電子メールにバイナリコンテンツを添付する必要性から生じました。 SMTP [RFC 5321]はメッセージ内で7ビットのUS-ASCII文字のみを許可したため、7ビットのASCII文字...]を使用してこれらのバイナリオクテットストリームを表す必要がありました...

これが質問に答えることを願っています

8
Ahmed Shah

Base64は、あらゆる種類のバイナリデータを送信する(実際、エンコードを目的としていますが、送信することを目的とした)多かれ少なかれコンパクトな方法です。

http://en.wikipedia.org/wiki/Base64 を参照してください

「一般的なルールは、ほとんどのエンコーディングに共通するサブセットの一部であり、印刷可能な64文字のセットを選択することです。」

これは非常に一般的な目的であり、一般的なニーズは必要以上のスペースを無駄にしないことです。

歴史的には、文字をバイトに格納するために使用される(ほぼ)すべてのエンコーディングの共通サブセットがあり、2 ^ 8のバイトの多くが単純なデータ転送中の損失または変換のリスクがあるという事実に基づいていますpaste-emailsend-emailreceive-copy-pasteシーケンス)。

(賛成票をブライアンのコメントにリダイレクトしてください、私はそれをより完全にし、できればより明確にするだけです)。

3
Denys Séguret