Base45エンコード・デコード
「AB」はBase45でBB8になります。RFC 9285のこの方式は、QRコードが英数字モードで読める45文字の中にデータを収めるもので、EUのデジタルCOVID証明書にも使われています。デコードも可能で、ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- AB
- 計算モード
- Encode
- 結果
- BB8
- エンコーディング
- base45
- 入力バイト数
- 2
- 出力バイト数
- 3
このBase45エンコードツールは、45文字のQRコード英数字アルファベットを用いて、平文をRFC 9285のBase45に変換し、Base45文字列をUTF-8テキストに復号します。エンジンは完全に決定的です。同じ入力とモードは常に同じ結果を生み、ネットワーク通信もランダムなソルトも日付依存の近道もありません。代表的な検証例として、ABのエンコードはBB8に、Hello!!はスペースを含む文字列に、base-45はUJCLQE7W581になります。
Base45とは何か、そしてこのツールが返す内容
Base45は、QRコードの英数字モードの中を移動するデータのために、RFC 9285で定義されたバイナリ・テキスト変換です。アルファベットは、0から9、AからZ、スペース、ドル記号、パーセント記号、アスタリスク、プラス記号、マイナス記号、ピリオド、スラッシュ、コロンから成る固定の45文字集合です。
エンコードは、入力バイトの各ペアをn=a×256+bという16ビットの符号なし整数として解釈し、最下位桁を左にしてnを3桁のBase45の数字として書き出します。最後に余った1バイトは2桁のみになります。この設計は、QRの英数字モードでは扱いにくいプラス記号、スラッシュ、パディングを必要とするBase64よりもQRの英数字詰め込みによく合います。
このページは常にその契約に従います。エンコードモードはテキストをUTF-8エンコードしてバイトを詰め込み、アルファベットの文字のみを返します。デコードモードはその処理を逆にし、アルファベット外の文字、3で割った余りが1になる不完全なグループ、数値が65535を超える3文字の三つ組を拒否します。
ストリーミング経路も、Base64へのサイレントなフォールバックもありません。
テキストとモードの読み取り方法と結果を再現可能に保つ仕組み
modeは既定でencodeとなり、decodeを明示的に受け付けます。op、direction、actionといった別名は、すでにそれらの名前を使っているスクリプトのために同じスイッチにマッピングされます。
エンコードは任意のUnicode文字列を受け付け、プラットフォームのTextEncoderでUTF-8バイトに変換した上で、上記のとおりBase45グループを出力します。デコードは純粋なBase45文字列を要求します。
長さを3で割った余りが1の場合、バイト数の整数を表現できないため拒否され、アルファベット外の文字は、その文字が現れたときに明確なインデックスと文字を示すメッセージとともに失敗します。
数字が復元された後、各三つ組は16ビットの上限に対してチェックされるため、65535を超える値にデコードされることになるGGWのような文字列はオーバーフローするのではなく失敗します。2文字の末尾は最大255の単一バイトにデコードされなければなりません。
その後の致命的なUTF-8デコードにより、バイナリのごみが文字化けしたテキストにならないことが保証されます。
Base45がQRコードで役立つ場面
フロントエンドチームは、誤ったアルファベットを使ってしまう場当たり的なスクリプトにデータを貼り付けることなく、統合デバッグ中にスキャンしたBase45セグメントをデコードします。バックエンドサービスは、英数字モードのみを受け付けるQRジェネレーターに渡す前に、短いバイナリblobをエンコードします。
品質エンジニアは、Base45対応を主張するミドルウェアがテーブルをサイレントに切り替えたり過大な三つ組を受け入れたりできないよう、契約テストのために決定的なエンコード・デコードのペアを生成します。教育者は、QRの英数字モード、15ビットのシンボルペア、Base45がどう相互作用するかを教えるとき、埋め込まれたスペースを含むAB→BB8とHello!!
という古典的なRFCの例とともに、同じツールを使います。このページでの計算はすべてブラウザ内で完結します。
活用例
英数字QRフィクスチャ
短いバイナリセーフなテキストをBase45に変換し、45文字のアルファベットから外れることなくQRジェネレーターが英数字モードを使えるようにします。
よくある質問
Base45とBase64はどう違いますか?
Base45は45文字のQR英数字アルファベットを使い、2バイトを3文字に詰め込みます。パディングがなく、メールやJWTのセグメントではなくQRコード向けに設計されています。
無効なBase45の三つ組とは何ですか?
値が65535を超える3文字のグループです(たとえばGGW)。
結果は決定的ですか?
はい。 同じテキストとモードは、ネットワーク、乱数、日付依存の挙動なしに常に同じ結果を生みます。
Base45の結果に空白が入るのはなぜですか?
空白もBase45で使う45文字の1つだからです。数字や英大文字、$、%、*、+などの記号と並んで使われます。「Hello!!」は空白を含む文字列になるので、デコードの際は空白も含めて結果全体をコピーしてください。
Base45にするとテキストはどれくらい長くなりますか?
2バイトごとに3文字になり、最後に1バイト余った場合は2文字になります。そのため2バイトの「AB」はBB8になります。QRコードでは英数字モードのまま、Base64より小さく収まります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/base45 \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"AB"}'const res = await fetch("https://api.kit.forhosting.com/enc/base45", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "AB"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/base45",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "AB"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/base45", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"AB"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"AB"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/base45", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "AB"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.base45",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
Base45は2バイトを3文字に、余った1バイトを2文字に詰め込むため、QRペイロードにおいてBase64よりコンパクトでありながら、スキャナーがすでに想定している英数字モードの範囲内にとどまります。この方式は、EUデジタルCOVID証明書や、QRセーフな文字集合を外れることなくバイナリのクレームを運ばなければならないその他のQR検証可能な資格情報の基盤となっています。メッセージ、CBORフラグメント、フィクスチャ文字列をBase45に変換するにはエンコードを、すでに保持している資格情報ペイロードから元のUTF-8テキストを復元するにはデコードを選んでください。資格情報のデバッグと教育にはブラウザで無料にご利用いただき、パイプラインがCIやバックエンドサービスで再現可能なBase45の変換を必要とする場合は、成功したリクエストごとに$0.002のAPIをご利用ください。
Base45とは何か、そしてこのツールが返す内容
JSONレスポンスには、変換された文字列を表すresult、encodeまたはdecodeをエコーするmode、base45に固定されたencoding、テストでサイズをアサートできるようinput_bytesとoutput_bytesが含まれます。文字列が有効なBase45テキストであるか、そうでなければinvalid_inputでリクエストが失敗するかのいずれかです。JWT向けの標準的なBase64urlが必要な場合は専用のBase64urlエンドポイントをご利用ください。このランディングページは、QR検証可能な資格情報が使うRFC 9285のアルファベット専用です。
テキストとモードの読み取り方法と結果を再現可能に保つ仕組み
優先されるペイロードフィールドはtextで、input、value、sといった別名を受け付けるため、フォーム、クエリ文字列、SDKクライアントは列名を変えずに同じ契約を再利用できます。自動化されたパイプライン内でBase45のテーブルを自前で再実装することなく同一の数学的結果が必要な場合は、このページの無料ブラウザ実行と有料APIを組み合わせてご利用ください。無効な入力はinvalid_inputを返し課金されないため、検証は安価なままであり、成功した変換は$0.002という固定の項目価格のままです。
Base45がQR資格情報・API・テストフィクスチャで役立つ場面
開発者は、EUデジタルCOVID証明書のQRペイロードを調べるとき、検証可能な資格情報のフィクスチャを作成するとき、小さなバイナリダイジェストを英数字QRコードに埋め込むとき、あるいはすでにRFC 9285を前提としているヘルスウォレットや身元証明ウォレットをデバッグするときにBase45に出会います。API経由では成功した検索1件につき$0.002がかかり、検証に失敗したリクエストは課金されず、レスポンスが返された後は何も保存されません。この無料のインタラクティブな探索と、同一結果を返す有料APIという分割は、KITのtier-Aカタログの他のツールと同様であり、教室でのデモから自動化パイプラインへ、エンコードされた結果を変えることなく移行できます。関連する資格情報のステップが必要なときはCBORや証明書のヘルパーと、無料で決定的なテキストツールの小さなラボを構築する際は他の符号化系エンドポイントと組み合わせてご利用ください。
連携の活用例
QR検証可能な資格情報
EUデジタルCOVID証明書やその他のQRベースの検証可能な資格情報が使うRFC 9285のBase45ペイロードをエンコード・デコードします。
決定的なCIフィクスチャ
ウォレットやスキャナーのサービスをまたいで、ユニットテスト、ゴールデンファイル、契約チェック向けに再現可能なBase45文字列を生成できます。
技術的な質問
Base45エンコードツールの料金はいくらですか?
このページのブラウザ版は無料です。API経由では成功したリクエストごとに$0.002がかかり、無効な入力には課金されません。
どのモードに対応していますか?
mode=encode(既定)は平文をBase45に変換します。mode=decodeはBase45文字列をUTF-8テキストに戻します。