Base32エンコーダー・デコーダー

Base32は、32個の文字でバイナリデータを表します。数字は2-7の6個、文字は26個の大文字を使い、読み間違いを避けるため0/Oや1/Iは含みません。そのため、人が入力したり声に出して読んだりするものに適しています。2要素認証のTOTPシークレット、バウチャーコード、大文字小文字を区別しない識別子などです。このツールは、RFC 4648に従い、任意のパディング設定でバイナリまたはテキストをBase32へエンコードし、元へデコードします。

Base32をエンコードまたはデコードする方法

  1. 1

    テキストを貼り付けるかファイルをアップロード

    入力はバイト列として扱われます。テキスト入力ではUTF-8が標準の解釈です。

  2. 2

    方向を選ぶ

    エンコードは生のバイト列をBase32文字列にし、デコードはバイト列を復元します。

  3. 3

    パディングを設定

    RFC 4648では、長さが8の倍数になるまで`=`のパディングを指定します。TOTPシークレットや短いトークンではオフにできます。

  4. 4

    結果をコピー

    エンコード結果は大文字で、設定に応じてパディングあり・なしになります。

RFC 4648アルファベット

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 2 3 4 5 6 7

0189はありません。各文字は5ビット(2^5 = 32)を表すため、入力5バイトが出力8文字になります。

具体例

ASCII文字列foo(バイト列 0x66 0x6F 0x6F = 01100110 01101111 01101111)をエンコードします。

  1. 5ビットごとのグループに分割:01100 11001 10111 10110 1111(最後のグループはパディング)
  2. アルファベットに対応付け:M Z X W 6
  3. 8文字にするため===パディングを追加:MZXW6===

パディングと長さのルール

入力バイト数 出力文字数 パディング
1 8 ======
2 8 ====
3 8 ===
4 8 =
5 8 (なし)

RFC 4648以外のバリエーション

  • Base32 Hex - アルファベット0-9A-V。DNSSECのNSEC3で使われます。
  • Crockford’s Base32 - 人の入力に最適化されたアルファベット。デコード時にO0I/L1を置換します。ULIDや一部のライセンスキーで使われます。

このツールの標準はRFC 4648です。

TOTPシークレット

Google Authenticatorや現代的な2FAアプリで使われるotpauth:// URI形式では、共有シークレットをパディングなしのBase32でエンコードします。「My Service」のQRコードをスキャンすると、secret=パラメータがBase32文字列になっています。このツールでデコードすると、HMACが使う生のバイト列を確認できます。

よくある質問

Base32は大文字小文字を区別せず、似た文字を避けます。人が読む・入力するものではこれが重要です。Base64は同じバイト列に対して短くなりますが、Il0Oを区別する必要があり、手書きや小さい印刷では失敗しやすくなります。

RFC 4648では必須ですが、実際の多くの利用者(TOTPアプリ、ULIDライブラリ、DNSSECリゾルバ)はパディングなしの入力を受け入れます。このツールでは選択できます。どちらの形式を貼ってもデコードできるはずです。

標準Base32には0、1、8、9がなく、常に大文字です。入力にそれらがある場合、RFC 4648ではなくCrockford版やbase32hexかもしれません。入力を整えるか、正しいバリエーションを選んでください。

いいえ。エンコードとデコードはブラウザ内で行われます。入力も結果も端末から出ません。

関連ツール