Base32 エンコーダー
テキストや 16 進バイトを標準の A–Z2–7 アルファベットまたは base32hex で Base32(RFC 4648)にエンコードします。UTF-8 対応、パディング任意、ブラウザー内で動作。
24 文字 · 28 バイト(UTF-8)
0 文字 · 0 バイト(UTF-8)
すべてブラウザ内で実行されます。データがアップロードされることはありません。
Base32 エンコードとは?
RFC 4648 の Base32 でテキストや生のバイト列をエンコードします。Base32 は大文字と数字 2〜7 だけを使うため、大文字小文字を区別せず、紛らわしい文字も避けられます。そのため、TOTP のシークレット、onion アドレス、大文字小文字を区別しないファイルシステムで使われています。
Base32 エンコードの使い方
- 入力 にテキストを入力するか、生のバイト列には 入力形式 として 16進バイト列 を選びます。
- アルファベット を選びます。標準(A–Z、2–7) または 拡張 16 進(0–9、A–V) です。
- = パディングを付ける をそのままにするか、外します。
- 出力 から Base32 をコピーします。
例
foobar
MZXW6YTBOI======
RFC 4648 §10 のテストベクターです。base32hex では CPNMUOJ1E8====== になります。
Base32 エンコードを使うべき場面
エンコードした値を人が入力したり、大文字小文字を区別せずに比較したり、DNS 名やファイル名で使ったりする可能性があるときに Base32 を選びます。入力より 60% 大きくなる(Base64 は 33%)ため、サイズが重要で大文字小文字が保たれるなら Base64 を使ってください。
Base32 エンコードの仕組み
バイト列はビットストリームとして読まれ、5 ビットのグループに切り出されます。各グループ(0〜31)がアルファベットの 1 文字を選びます。入力 5 バイト(40 ビット)がちょうど 8 文字になります。端数の最後のブロックは 5 ビットのグループになるようゼロで埋められ、出力は = で 8 文字の倍数にパディングされます。テキストはまず UTF-8 に変換されます。
一般的な使用例
- 認証アプリ用の TOTP/2FA のシークレットを作る
- 大文字小文字を区別しない識別子を生成する
- DNS ラベルや大文字小文字を区別しないファイルシステム向けにデータをエンコードする
- 既知のテストベクターで RFC 4648 の実装をテストする
よくある質問
base32hex とは何ですか?
RFC 4648 §7 の「拡張 16 進」アルファベット(0–9、A–V)です。元のバイト列の並び順を保ち、DNSSEC の NSEC3 レコードで使われます。
Base32 は Crockford の Base32 と同じですか?
いいえ。Crockford の Base32 は I、L、O、U を除いた別のアルファベットを使います。このツールは RFC 4648 のアルファベットを実装しています。
= パディングは残すべきですか?
厳密な RFC 4648 を要求する相手には残してください。TOTP のシークレットは通常パディングなしで表示され、ほとんどのデコーダー(このツールを含む)はどちらも受け付けます。