「Base N」encodingをまとめてみる。
はじめに
セキュリティの仕事をしていると、64以外のBaseNの符号化を目にすることがある。実はいくつものBaseNのエンコーディング手法が存在するのでまとめてみる。
どの数値で提案されているのかは、Wikipediaの英語版にまとめられている。https://en.wikipedia.org/wiki/List_of_numeral_systems
とにかく列挙してみる
Base26 encoding(letters only)
ABCDEFGHIJKLMNOPQRSTUVWXYZ
小文字をつかっても良い。
Base32 encoding
ABCDEFGHIJKLMNOPQRSTUVWXYZ234567
適度にコンパクトで、判読性が高く、かつ発声もしやすいため、他の符号化に比べてバランスが良いとされる。RFC 4648で定義されている。
アルファベット側のIやOを除く手法も提案されている。
0123456789ABCDEFGHJKMNPQRSTVWXYZ
Base36 encoding(alphanumeric)
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
Base52 encoding(full letters)
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Base62から数字を除いたものだが、Base58やBase62に比べるとメリットがない。使用例を見つけられなかった。
Base58 encoding
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
数字の0と大文字のO、および大文字のIと小文字のLは区別がつきにくいため、Base62からこれらの4文字を除いて判読性を向上させたもの。URLの短縮サービスでしばしば用いられるほか、Bitcoinにも利用されている。
Base62 encoding (full alphanumeric)
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
Base64は'+'と'/'およびパディングの'='を含むが、これらの記号はURIにはそのまま使えない。Base62は記号を使用しなのでURIフレンドリーである。JavaScriptの難読化にしばしば利用される。
Base64 encoding
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
7ビットしか扱えない電子メールにて広く用いられる。URLや正規表現のため、'+'と'/'を他の文字に置き換えるルールもある。
Base85 encoding(ASCII85)
AdobeのPostScriptやPDFファイルで利用されいている。
Base91 encoding
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&()*+,./:;<=>?@[]^_`{|}~"
Base64よりも多数の記号を利用するため、符号化後の圧縮率が高い。SECCON CTF 2013 オンライン予選で出題されたことがある。
Base92 encoding
Base94 encoding(printable ASCII characters)
Base95 encoding
この辺は使える記号の数が増えるだけの感じなので省略。