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

テキスト、16進数のバイト列、ファイルを Base32 に変換し、元に戻します。RFC 4648 のアルファベット、Base32hex、Crockford、z-base-32 から選択でき、パディングや大文字・小文字も指定できます。

すべてブラウザ内で処理され、データはアップロードされません。

使い方

  1. テキストを Base32 にするには「エンコード」を、Base32 をテキストに戻すには「デコード」を選択します。
  2. 「種類」を選びます。デフォルトは RFC 4648 で、TOTP のシークレットやほとんどのライブラリで使われている形式です。
  3. テキストを入力または貼り付けるか、ファイルを開きます。結果は入力に合わせてリアルタイムに更新されます。
  4. 結果をコピーするか、ファイルとしてダウンロードします。

Base32 とは

Base32 は、32 種類の印字可能な文字でバイナリデータを表すエンコード方式です。1 文字が 5 ビットを表すため、5 バイトの入力ごとに 8 文字が出力されます。出力は入力より約 60% 大きくなり、Base64 よりオーバーヘッドは大きいものの、アルファベットに小文字や紛らわしい記号を含みません。

RFC 4648 で定義されている標準のアルファベットは、A-Z の文字と 2-7 の数字を使います。数字の 0、1、8、9 は、文字の O、I、B と見間違えないように除外されています。入力の長さが 5 バイトの倍数でない場合、出力は = で 8 文字の倍数になるようパディングされます。

Base32 の用途

  • 2 要素認証。認証アプリで使われる TOTP や HOTP のシークレット(otpauth:// リンクの secret= の値)は Base32 の文字列です。
  • 大文字と小文字を区別しないシステム。アルファベットが大文字か小文字の一方だけなので、大文字と小文字を区別しないファイルシステム、DNS ラベル、メールアドレスでも Base32 はそのまま使えます。
  • 人が入力するコード。ライセンスキー、onion アドレス、短い識別子では、読み上げや入力がしやすいように Base32 が使われます。

読みやすさよりサイズが重要な場合は、よりコンパクトな Base64 を使いましょう。紛らわしい文字を含まない短い識別子が必要な場合は、Crockford Base32 と Base58 を比較してみてください。

Base32 の種類

種類アルファベット主な用途
RFC 4648A-Z 2-7TOTP のシークレット、汎用
Base32hex0-9 A-V並び順が元のバイト列と一致、DNSSEC NSEC3
Crockford0-9 A-Z(I、L、O、U を除く)読みやすい ID、ULID
z-base-32小文字、並べ替え済み人が扱いやすいキー、OpenPGP WKD、ZRTP

コードで Base32 を扱う

# Python
import base64
base64.b32encode(b'hello')        # エンコード
base64.b32decode('NBSWY3DP')      # デコード

// Node.js には Base32 の組み込み機能がないため、"hi-base32" などのパッケージを使います
// Go (import "encoding/base32")
base32.StdEncoding.EncodeToString(data)

仕様

使用文字A-Z 2-7
出力サイズ5 バイトごとに 8 文字(160%)
パディング= で 8 文字の倍数に揃える
規格RFC 4648 第 6 節
大文字と小文字の区別なし

エンコード例

入力 (UTF-8)出力
Hello, World!JBSWY3DPFQQFO33SNRSCC===
Base64.isIJQXGZJWGQXGS4Y=
你好4S62BZNFXU======

よくある質問

Base32 は大文字と小文字を区別しますか?

RFC 4648 のアルファベットは大文字で定義されていますが、このデコーダーは小文字の入力も受け付けます。小文字で出力したい場合は「小文字」オプションを使用してください。

Base32 の文字列が = で終わるのはなぜですか?

= はパディングで、最後のブロックを 8 文字にそろえるためのものです。ほとんどの TOTP アプリを含め、多くのシステムはパディングのない Base32 を受け付けます。削除するには「パディング」をオフにしてください。

Base32 は元のデータよりどのくらい大きくなりますか?

5 バイトごとに 8 文字になるため、Base32 の出力は入力の約 1.6 倍のサイズになります。Base64 は約 1.33 倍です。

このツールで TOTP のシークレットをデコードできますか?

はい。シークレットを「デコード」タブに貼り付け、「出力形式」で「16進数」を選ぶと、鍵の生のバイト列を確認できます。シークレットに含まれるスペースは無視されます。