使い方
- テキストを Base32 にするには「エンコード」を、Base32 をテキストに戻すには「デコード」を選択します。
- 「種類」を選びます。デフォルトは RFC 4648 で、TOTP のシークレットやほとんどのライブラリで使われている形式です。
- テキストを入力または貼り付けるか、ファイルを開きます。結果は入力に合わせてリアルタイムに更新されます。
- 結果をコピーするか、ファイルとしてダウンロードします。
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 4648 | A-Z 2-7 | TOTP のシークレット、汎用 |
| Base32hex | 0-9 A-V | 並び順が元のバイト列と一致、DNSSEC NSEC3 |
| Crockford | 0-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.is | IJQXGZJWGQXGS4Y= |
你好 | 4S62BZNFXU====== |
よくある質問
Base32 は大文字と小文字を区別しますか?
RFC 4648 のアルファベットは大文字で定義されていますが、このデコーダーは小文字の入力も受け付けます。小文字で出力したい場合は「小文字」オプションを使用してください。
Base32 の文字列が = で終わるのはなぜですか?
= はパディングで、最後のブロックを 8 文字にそろえるためのものです。ほとんどの TOTP アプリを含め、多くのシステムはパディングのない Base32 を受け付けます。削除するには「パディング」をオフにしてください。
Base32 は元のデータよりどのくらい大きくなりますか?
5 バイトごとに 8 文字になるため、Base32 の出力は入力の約 1.6 倍のサイズになります。Base64 は約 1.33 倍です。
このツールで TOTP のシークレットをデコードできますか?
はい。シークレットを「デコード」タブに貼り付け、「出力形式」で「16進数」を選ぶと、鍵の生のバイト列を確認できます。シークレットに含まれるスペースは無視されます。