Base32エンコード・デコード
AからZと2から7の標準の文字で、テキストとBase32を相互に変換します。「Hello, Base32!」はJBSWY3DPFQQEEYLTMUZTEII=になります。アクセントや絵文字も扱え、壊れた入力は中途半端に戻さず受け付けません。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- Hello, Base32!
- 計算モード
- Encode
- 生産量
- JBSWY3DPFQQEEYLTMUZTEII=
このBase32エンコーダー・デコーダーは、UnicodeテキストをRFC 4648標準のアルファベットで変換します。使用する文字は大文字のAからZと数字の2から7です。エンコードを選ぶとUTF-8テキストが標準パディング付きBase32になり、デコードを選ぶと元のテキストが復元されます。デコード時には、文字集合、パディング、長さ、未使用の末尾ビット、UTF-8の結果を検証するため、壊れた内容を黙って返すことはありません。処理は決定的で、ネットワークを使わず、コピーしやすい結果を返します。
RFC 4648 Base32がテキストを表す仕組み
Base32はバイナリデータをテキストで表す符号化方式であり、暗号化、圧縮、秘匿を行うものではありません。エンコードモードでは、入力された文字列を最初にUTF-8バイトへ変換します。次に、そのバイト列を連続したビット列として読み、5ビットずつのグループに分けます。
各5ビット値は、RFC 4648のアルファベットから1文字を選びます。このアルファベットは大文字のAからZと数字の2から7で構成されます。入力5バイトは40ビットなので、Base32の8文字に正確に対応します。
最後のブロックが短い場合は、最後の記号を完成させるためにゼロビットを補い、全体が8文字単位になるまで等号を追加します。本ツールは常に標準アルファベットと正規のパディングを出力するため、対応ライブラリの結果と直接比較できます。ビット処理の前にUnicodeを変換するので、アクセント付き文字、非ラテン文字、絵文字も安定して扱えます。
同じ入力とモードからは、必ず同じ出力が得られます。
デコード時の検証とエラー処理
デコードモードでは、見た目が似たトークンではなく、RFC 4648 Base32として入力を扱います。英字は大文字でも小文字でも構いませんが、データ記号はA-Zまたは2-7でなければなりません。等号は末尾のパディングとしてのみ使用でき、その個数は最後のブロックに含まれるデータ記号数と一致する必要があります。
完全なバイトを表せない長さも拒否されます。さらに、使われていない末尾ビットも検査します。準拠したエンコーダーはその部分をゼロにしますが、ゼロ以外を許すと同じバイト列に複数の表記が生じるためです。
バイトを復元した後は、厳密なUTF-8デコーダーでテキストとして有効か確認します。この機能は任意のバイナリファイルではなく文字列を返すためです。不正文字、誤ったパディング、不可能な長さ、ゼロでない末尾ビット、不正なUTF-8があれば、部分的な結果を返さず入力エラーになります。
構造が正しければ、パディングのないBase32も受け付けます。
ツールや自動処理での利用方法
変換するには、テキストを入力してエンコードまたはデコードを選択してください。Base32は、プロビジョニング用レコード、人が読む設定資料、大文字と小文字を区別しない保存先など、使用できる文字が限られる仕組みを値が通過するときに役立ちます。認証アプリの秘密情報でもよく使われますが、符号化だけでは秘密を保護できないため、アクセス制御は引き続き必要です。
また、別の言語の実装向けに参照ベクトルを作る、文書からコピーしたデータを検証する、取り込み前に未知の値を調べる、といった用途にも使えます。ネットワーク、乱数、時刻、アカウント状態、外部サービスを使わないため、再現可能なビルドやテストに適しています。
活用例
相互運用できる設定値の準備
Unicodeテキストを標準アルファベットとパディングで符号化し、テキスト設定へ保存したり対応システムと交換したりできます。
コピーしたBase32値の検証
貼り付けた値をデコードし、記号、パディング、末尾ビット、UTF-8結果が不正な場合は明確なエラーを確認できます。
複数言語向けテストベクトルの作成
ブラウザー、サーバー、コマンドラインのBase32実装を比較するため、安定した入力と出力を生成できます。
よくある質問
この変換ツールはどのBase32アルファベットを使いますか?
RFC 4648標準のBase32アルファベットです。大文字のAからZ、数字の2から7、出力パディングの等号を使用します。
デコード時に小文字も使用できますか?
はい。 デコード前に大文字へ正規化します。RFC 4648のアルファベットに含まれない文字は拒否されます。
Base32は暗号化ですか?
いいえ。 Base32はバイトの可逆的な表現であり、暗号化やハッシュではありません。値を持つ人は誰でもデコードできます。
不正な文字が含まれるとどうなりますか?
該当する文字と位置を示す入力エラーになり、途中までデコードしたテキストは返しません。
結果の最後にイコールが付くのはなぜですか?
埋め草です。Base32は8文字ずつのまとまりで動き、5バイトがちょうど8文字になります。最後のまとまりが短いときはイコールで埋め、例ではEII=で終わります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/web/base32-convert \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Hello, Base32!","mode":"encode"}'const res = await fetch("https://api.kit.forhosting.com/web/base32-convert", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Hello, Base32!",
"mode": "encode"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/base32-convert",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Hello, Base32!",
"mode": "encode"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/base32-convert", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Hello, Base32!","mode":"encode"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Hello, Base32!","mode":"encode"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/base32-convert", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "Hello, Base32!",
"mode": "encode"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.base32_convert",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
timeout_sec | 30 |
max_crawl_pages | 25 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
ツールや自動処理での利用方法
エンコードではパディング付きBase32文字列が出力フィールドに入り、デコードでは復元されたUnicode文字列が同じフィールドに入ります。ブラウザーでの対話的な変換に加え、APIで自動処理する各項目の料金は$0.002です。
技術的な質問
APIでの変換料金はいくらですか。
APIで正常に処理された各項目には、公開基本料金$0.002が適用されます。ブラウザーでは対話的に変換できます。