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の倍数になるまで`=`で埋めます。デコード時はパディングあり・なしの両方を受け付けます。

  4. 4

    結果をコピー

    エンコード結果は大文字で、8の倍数になるまで`=`で埋められます。

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はエンコード時のパディングを定めています。このツールはエンコード結果を常に8の倍数になるまで=で埋めます。実際の多くの利用者(TOTPアプリ、ULIDライブラリ、DNSSECリゾルバ)はパディングなしの入力を受け入れ、このデコーダーもパディングの有無どちらの形式も受け付けます。

標準Base32には0、1、8、9がなく、常に大文字です。デコーダーはRFC 4648アルファベット外の文字を黙って無視するため、小文字や特殊な文字を含む入力は誤ったバイト列にデコードされます。デコード前に、入力を大文字のA-Zと数字2-7に正規化してください。

はい。結果を計算するため、テキストはページのサーバーへ送信されます。また複数ステップ表示では、同じテキストがステップのリンクにも含まれます。保存や記録はされません。

関連ツール

このツールは他の言語でも利用できます