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 エンコードの使い方

  1. 入力 にテキストを入力するか、生のバイト列には 入力形式 として 16進バイト列 を選びます。
  2. アルファベット を選びます。標準(A–Z、2–7) または 拡張 16 進(0–9、A–V) です。
  3. = パディングを付ける をそのままにするか、外します。
  4. 出力 から 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 のシークレットは通常パディングなしで表示され、ほとんどのデコーダー(このツールを含む)はどちらも受け付けます。

他のカテゴリを見る