Base32エンコーダー/デコーダー

テキストとBase32を相互にエンコード・デコード

テキストBase32

Base32エンコーダー/デコーダーについて

Base32はバイト列を英大文字A〜Zと数字2〜7の32文字で書き表す方式です(RFC 4648 6章)。Base64より長くなりますが、大文字小文字を区別せず、紛らわしい0・1・8・9を含まないため、人が目で読んで手で入力する値に使われます。代表例は二段階認証アプリの「セットアップキー」です。

このツールはテキストをUTF-8バイトにしてからRFC 4648の標準アルファベットで符号化し、長さが8の倍数になるよう=を付けます。デコード時は小文字も受け付け、空白・改行・末尾の=は無視します。

5バイトが8文字になる計算

32 = 2⁵なので1文字が5ビットを表します。8ビットと5ビットの最小公倍数は40ビットなので、Base32は5バイトを1ブロックとして8文字に書きます。サイズは ceil(n/5)×8、つまり1.6倍(+60%)。Base64の+33%と比べるとかなり長くなります。

最後のブロックが5バイトに満たないときは、残りのビットを0で埋めて文字にし、残りを=で埋めます。残りが1・2・3・4バイトならパディングは6・4・3・1個。RFCのテストベクター「foobar」が MZXW6YTBOI====== と=を6つ持つのはこのためです。

なぜBase32を使うのか

Base64は大文字小文字を区別し、+ / = も混ざるので、電話で読み上げたり紙から写したりするのに向きません。標準Base32は大文字と2〜7だけを使い、0・1・8・9を含まないのでO・I・Bと見間違えることもありません。

認証アプリ(Google Authenticatorなど)のQRコードに入っている otpauth:// のsecretの値がBase32です。QRが読めないときに表示される「JBSWY3DPEHPK3PXP」のような文字列がそれで、アプリはこれをデコードしたバイト列をHMACの鍵として使います(TOTP、RFC 6238)。セットアップキーをこのツールでデコードすると意味のない文字になるのは、元がランダムなバイトだからです。

Base32は1種類ではない

RFC 4648にはこのツールが使う標準Base32のほかに「base32hex」(0〜9、A〜V)があり、符号化後もバイト順どおりに並ぶ性質からDNSSECのNSEC3レコードで使われています。ほかにCrockford Base32やz-base-32などの非標準の変種もあります。入力に0・1・8・9が含まれて「無効な文字」エラーになる場合は、別の変種である可能性が高いです。

例

RFC 4648のテストベクター

入力
f / fo / foo / foob / fooba / foobar
結果
MY====== / MZXQ==== / MZXW6=== / MZXW6YQ= / MZXW6YTB / MZXW6YTBOI======

=の数が6→4→3→1と減り、5バイトでちょうど割り切れます。RFC 10章の値と一致します。

サンプル鍵の正体

入力
Hello
結果
JBSWY3DP

TOTPライブラリの説明によく出るJBSWY3DPで始まる鍵は、「Hello」をBase32にしたものです。

日本語はバイト数が増える

入力
日本
結果
42L2LZU4VQ======

UTF-8で6バイトなので、5バイト1ブロック+1バイトで8+8文字、うち=が6個です。

大文字小文字は無視、数字は厳密

入力
nbswy3dp(デコード)
結果
hello

小文字でもNBSWY3DPと同じ結果です。NBSWY3D0のように数字の0が混じると「無効なBase32文字」エラーになります。

使い方

  1. エンコードならテキストを、デコードならBase32文字列を貼り付けます。
  2. 結果はすぐに表示され、切り替えボタンで方向を反転できます。
  3. エラーが出たら0・1・8・9や記号が混じっていないか、別の変種でないか確認します。

よくある質問

認証アプリのキーをデコードすると文字化けします。

正常です。キーはランダムなバイト列をBase32で書いたもので、テキストではありません。このツールは結果をUTF-8テキストとして表示するため、�などになります。

Base32とBase64はどちらを使うべき?

機械同士でやり取りするなら短いBase64が向きます。人が読んで入力する値や、大文字小文字を区別しないシステム(DNS名など)に入れる値ならBase32です。

末尾の=は省略できますか?

このツールは=なしでもデコードできます。認証アプリのキーもパディングなしで表示されることが多いです。

出典

基準日:

プライバシーとデータの扱い