- blogs:
- cles::blog

16進表記と base64url の容量効率

バイナリのデータをテキストデータとして表すときに16進数表記をよく使いますが、ちょっと長すぎる場合があるのでなんとか短くできないかなと思って色々考えてみたところ、大文字小文字の区別ができる環境の場合はbase64URLを使った方が容量効率がいいという当たり前のことに気づいたのでメモ。
バイナリのものをテキストデータに変換して扱う代表例といえば、データのハッシュ値でしょうか。例として sha256 を考えてみると、入力容量に関わらず得られるハッシュ値はバイナリで 256bit になります。これを16進数表記すると、a~z,0~9を使って1文字 (8 bit) で 4bit を表すことになるので、64文字 (512 bit) となります。テキスト化したことで容量が2倍になってしまいました。これに対して、base64url を使うと A~Z,a~z,0~9,-,_,= を使って1文字 (8 bit) で 6bit を表すことになるので、43文字 (256/6 = 42.6666667)で表すことができます。
まとめるとこんな感じでしょうか。
ちなみに今回は base64 ではなく base64url にしているのは、これをファイル名にすることを想定しているからです。
base64 と base64url の違いは base64 が +,/ を使っていたところを -,_ と表記するだけの違いです。
以下、プログラミングメモ。
† 実際に php でプログラムしてみる
実際にプログラムで書いて確認してみます。今回は簡単にかけそうだったので php で書いてみました。
これを実行すると下記のような結果が得られます。
予想どおりの文字数になっていることが分かります。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/5459
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110634)
3 . 年次の人間ドックへ(110267)
4 . 2023 年分の確定申告完了!(1つめ)(109810)
5 . 三菱鉛筆がラミーを買収(109710)