Base32エンコーダー/デコーダー
テキストとBase32を相互にエンコード・デコード
処理中…
0.0
停止していません。計算が終わると結果が表示されます。
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文字」エラーになります。
使い方
- エンコードならテキストを、デコードならBase32文字列を貼り付けます。
- 結果はすぐに表示され、切り替えボタンで方向を反転できます。
- エラーが出たら0・1・8・9や記号が混じっていないか、別の変種でないか確認します。
よくある質問
認証アプリのキーをデコードすると文字化けします。
正常です。キーはランダムなバイト列をBase32で書いたもので、テキストではありません。このツールは結果をUTF-8テキストとして表示するため、�などになります。
Base32とBase64はどちらを使うべき?
機械同士でやり取りするなら短いBase64が向きます。人が読んで入力する値や、大文字小文字を区別しないシステム(DNS名など)に入れる値ならBase32です。
末尾の=は省略できますか?
このツールは=なしでもデコードできます。認証アプリのキーもパディングなしで表示されることが多いです。
出典
- RFC 4648 — 6章 Base32、7章 base32hex、10章 テストベクター
- RFC 6238 — TOTP
- RFC 5155 — DNSSEC NSEC3(base32hexを使用)
- Google Authenticator — Key Uri Format
基準日: