1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【覚書き】Base64エンコードは圧縮やセキュリティー向上ためのものではないらしい

Posted at

初めに

今までなんとなく利用していたBase64エンコードですが、実際どんなことをしているのかよく分かっていませんでした。
「圧縮してパフォーマンス向上?」「暗号化してセキュリティー向上?」くらいに思っていたのですが、どうやらそんなことはないみたいです。

今回は、Base64エンコードの方法とその目的についてまとめます。

Base64エンコードとは

Base64エンコードとはエンコードの手法の一つです。データを64種類の文字で表すようにエンコードをします。

64種類の文字はアルファベット(a-zA-Z)、数字(0-9)そして一部記号(+,/)の64種類で構成されます。

Base64が圧縮できない理由

本題です。Base64ではデータを圧縮することはできません。
その理由は、Base64のアルゴリズムにあります。

以下はBase64のアルゴリズムの説明です。

Base64のアルゴリズム
Hello

 ↓ バイナリデータ(2進数)に変換

0100100001100101011011000110110001101111

 ↓ 6ビットごとに区切る

010010 000110 010101 101100 011011 000110 1111

 ↓ 6ビットに足りない場合、0埋めする

010010 000110 010101 101100 011011 000110 111100

 ↓ 各6ビットを対応する文字に置き換える

S G V s b G 8

 ↓ 数が4の倍数個になるように、「=」で埋める

SGVsbG8=

この通り、「Hello」の5文字が「SGVsbG8=」という8文字にエンコードされました。

Base64では変換の過程でバイナリデータを6ビットごとに分割します。対して、UTF-8でエンコードされた文字は1文字に8~32ビットを使います。そのため、Base64でエンコードをした際は文字が長くなってしまいます。

Base64がセキュリティ向上で使われない理由

上述のエンコード過程をご参照ください。
Base64では各6ビット配列を文字に直すことしかしていません。だれでも簡単にデコードすることが可能です。そのため、セキュリティー向上のために利用することはできないのです。

Base64エンコードの目的

圧縮もセキュリティ向上もできないBase64は何目的で利用されるのでしょうか。

目的1:バイナリデータの送信

HTTPなど一部のプロトコルは、画像や音声などのバイナリデータをそのまま扱うことはできません。扱うためにはテキストデータに直す必要があります。
Base64はバイナリデータをテキストに変換することが可能なため、その用途で利用されます。

目的2:非ASCIIデータをASCIIに変換

SMTPやURLなどでは、漢字やひらがななどの非ASCIIデータを扱うことができません。
Base64で扱う文字は全てASCIIデータのため、そのようなプロトコルで非ASCIIデータを扱うために利用されます。

ASCIIとは、英語のアルファベット、数字、記号、制御文字を7ビットで表現する文字コードのことです。
7ビットなので、6ビットのBase64の倍の128種類の文字が利用されます。

終わりに

今までよくわからずに使っていたBase64ですが、アルゴリズムや目的が理解するのは面白いですね。
Base64以外にも様々なエンコード方式がありますが、ただ仕様に沿って実装するだけでなく、目的やアルゴリズムを理解した上で実装するのが大切ですね。

ここまでご覧いただきありがとうございました!

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?