Base58/Base32/Base16変換の仕組みガイド|なぜ0OIlを除くのか
公開日:2026年9月16日 更新日:2026年9月15日 運営:シルギア(Analyzegear, Inc.) 対象ツール:Base32 / Base58 変換
このツールは、テキスト(UTF-8)を Base16(16進)・Base32(RFC4648)・Base58(Bitcoin方式)の3つの表記へ相互変換します。どれも「バイト列を、決まった少数の文字だけで表す」仕組みです。名前は似ていますが、文字の選び方も変換の計算方法も異なります。このガイドでは、それぞれが内部で何をしているのか、なぜ Base58 だけ紛らわしい文字を外すのかを、実際の変換例とともにていねいに読み解きます。
まず「バイトをテキストで表す」とは
コンピュータの中では、文字も画像も最終的には0〜255の数値(バイト)の並びです。このツールはエンコードのとき、まず入力テキストを UTF-8 のバイト列に変換します。たとえば「Hello」は H=0x48・e=0x65・l=0x6c・l=0x6c・o=0x6f の5バイトになります。このバイト列を、各方式のルールで「使ってよい文字」だけに置き換えたものが変換結果です。デコードはその逆で、文字列をバイト列に戻し、UTF-8テキストとして読み直します。だから元がテキストなら往復して元に戻り、日本語や絵文字も UTF-8 の複数バイトとしてそのまま扱えます。
Base16とBase32は「ビットを切り分ける」
Base16(hex)は 0-9 と a-f の16文字で、1バイト(8ビット)をちょうど2桁で表します。16=2の4乗なので、上位4ビットと下位4ビットを1桁ずつに割り当てるだけ。値とのずれがなく人が読みやすいため、ハッシュ値やバイナリのダンプ、色コードなどで定番です。
Base32(RFC4648)は A-Z と 2-7 の32文字を使います。32=2の5乗なので、バイト列を5ビットずつに区切って1文字に割り当てます。5バイト(40ビット)がちょうど8文字にそろうため、足りない端数は末尾を「=」で埋めて長さを8の倍数に整えます。この末尾の「=」がパディングです。大文字と数字だけで構成され、大文字小文字を区別しない環境や口頭・手入力に強いのが利点で、本ツールのデコードは小文字入力も受け付けます。
Base58はなぜ「0・O・I・l」を外すのか
Base58 は Bitcoin で考案された方式で、英数字62文字から「0(ゼロ)・O(大文字オー)・I(大文字アイ)・l(小文字エル)」の4文字を除いた58文字を使います。理由は単純で、これらは字形が似ていて人が読み間違えやすいからです。ゼロと大文字オー、大文字アイと小文字エルは、フォントや手書きによっては見分けがつきません。Base58 はウォレットアドレスや IPFS のコンテンツID(CID)のように、人が目視・手入力・書き写しをする識別子で使われるため、写し間違いが致命的になります。そこで、そもそも紛らわしい文字を語彙から外してしまうわけです。記号(+ / =)も含まないので、二重クリックで一語として選択しやすいという利点もあります。
Base58は「基数変換」で作る
Base16・Base32 がビットを機械的に区切るのに対し、Base58 は違います。58は2のべき乗ではないので、ビットをきれいに割り切れません。そこでバイト列全体をひとつの大きな数とみなし、それを58進数へ変換します(基数変換)。1文字が1バイトに対応しない点が Base32 との決定的な違いです。
1バイトだけの例で見てみましょう。「A」は1バイトで値は65です。65 を58で割ると商1・余り7。桁は下から余りの順に並ぶので [1, 7] となり、58文字表の1番目「2」と7番目「8」を引いて Base58 は「28」になります。実際にこのツールで A をエンコードすると「28」が出ます。バイト列が長くなると桁上がりが連鎖するため、本ツールは巨大整数を一度に扱わず、桁上がりを次々に伝えていくバイト単位の計算で求めています。
先頭ゼロバイトと「1」の関係
基数変換には弱点があります。数として見ると、先頭にある 0x00 は数値に影響しないため消えてしまい、そのままではデコード時に復元できません。Bitcoin方式の Base58 はこれを、先頭の 0x00 バイト1個につき先頭文字「1」(58文字表の0番目)1文字で表す、という約束で解決します。たとえばバイト列 [0x00, 0x00, 0x41] は、先頭の2つのゼロバイトが「11」に、残りの 0x41 が「28」になって「1128」となり、デコードすると [0, 0, 65] に正しく戻ります。だから Bitcoin アドレスの多くが「1」で始まるのです。
Base64との違いと使い分け・注意点
よく混同される Base64 との違いは、主に「使う文字」です。Base64 は + / = などの記号を含むため、URLやファイル名でエスケープが要る場面があります。Base58 は記号を持たず英数字だけで完結する代わり、64より基数が小さいぶん同じデータでも文字数はやや多くなります。目安として、機械間のバイナリ埋め込みや効率重視なら Base64、人が目視・手入力する識別子なら Base58、単純なバイト確認や16進前提のツール連携なら Base16 が向きます。
実際に「Hello」を3方式で変換すると、Base16は「48656c6c6f」、Base32は「JBSWY3DP」、Base58は「9Ajdvzr」になり、いずれもデコードすれば「Hello」に戻ります。最後に大切な注意点です。Base16/32/58 はいずれも誰でも元に戻せる可逆な符号化であって、暗号化やハッシュ化ではありません。見た目が変わるだけで秘匿性はないので、パスワードや個人情報を隠す目的には使わないでください。なお本ツールの変換はすべてブラウザ内で完結し、入力内容はどこにも送信されません。