ROT18暗号
Hello, World! 123は一度の変換でUryyb, Jbeyq! 678になります。文字は13文字、数字は5つずれ、空白や句読点はそのままです。もう一度かけると元に戻るので、隠すのも戻すのも同じ操作です。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- Hello, World! 123
- 結果
- Uryyb, Jbeyq! 678
- 長さ
- 17
- 回転した文字数
- 10
- 回転した数字数
- 3
ROT18は、ラテン文字ごとにROT13を、十進数字ごとにROT5を一度の処理で適用する組み合わせ回転暗号です。AからZおよびaからzはアルファベット上を十三桁進み、HelloはUryybになり、ゼロから九の数字は五桁進んで123は678になります。空白・句読点・その他の文字はそのまま残り、パズル文字列や軽いラベルで読みやすい形を保ちます。十三は二十六の半分、五は十の半分なので、ROT18を二度適用すると一回目が取り消され、同じ操作が符号化と復号の両方になります。空でない任意の文字列を貼ると変換結果が即座に得られます。
ROT18が文字のROT13と数字のROT5をどう組み合わせるか
ROT18は別のアルファベットではなく、二種の古典的な半周回転を文字ごとに積として適用したものです。各ラテン文字について、アルゴリズムはケース内でゼロから二十五の添字に写像し、十三を加え、二十六で剰余を取り、同じケースの文字に戻します。これが古典的ROT13で、AはN、NはA、HelloはUryyb、Uryybは再びHelloになります。
各ASCII数字についてはゼロから九を添字に写像し、五を加え、十で剰余を取って戻します。ゼロは五、五はゼロ、一二三は六七八になります。この二集合の外の文字—空白、カンマ、絵文字、基本ラテンブロック外のアクセント付き文字—は形を保つためにそのままコピーされます。
組み合わせ変換は対合です。十三+十三は二十六、五+五は十なので、二回適用後に各文字と各数字は自分自身に戻り、符号化と復号は同じ呼び出しです。選ぶ鍵もモードフラグも浮動小数ステップもありません。
各段階は固定規則の整数モジュラ演算で、完全に決定的であり、ネットワーク呼び出し・乱数シード・壁時計タイムスタンプはありません。本ページはこの固定ROT18プロファイルのみを実装し、可変カエサルシフト・Vigenère・AES・総当たりクラッカーではありません。それらは別ツール・別検索意図です。
実務でROT18ツールが現れる場面
入門の暗号・プログラミング授業はまずROT13を紹介し、次に数字へ拡張するよう求めることが多く、信頼できる単一のROT18オラクルは、文字と数字の両方の回転が必要な宿題デモと自動採点を速めます。CTFウォーミングアップやパズルハントは今も単語と数字が混ざったROT風メッセージを隠し、解答者は一般的な暗号解析スイートではなく速く予測可能な変換を求めます。
サポートとコンテンツのチームは、文字と数字が混ざるネタバレ・クイズ解答・連番風ラベル・内部チケットコードを軽く難読化し、言語固有ライブラリなしで逆経路を必要とすることがあります。
可変整数カエサルシフト、強力な認証付き暗号化、Base32/Base64符号化、頻度分析による自動鍵復元が必要なら、この固定ROT18ページを過負荷にせず別の検索意図とランディングとして扱ってください。
活用例
授業でのROT13+数字デモ
半アルファベット回転と半数字回転の組み合わせを、文字と数字をまとめた基準変換で生徒に示します。
パズルとCTFの混在英数字文字列
単語と数字が混ざるチャレンジ文字列を、問題集ごとに使い捨てスクリプトを書かずに符号化または逆変換します。
よくある質問
ROT18とは何ですか?
組み合わせ回転暗号です。ラテン文字A–Z/a–zにROT13、数字0–9にROT5。英数字以外はそのまま。 二回適用で元のテキストに戻ります。
ROT18を復号するには?
同じ変換をもう一度適用します。13+13=26、5+5=10なのでROT18は自己逆で、符号化と復号は同一です。
空入力だとどうなりますか?
空でない text 文字列が必須で、空白入力は拒否され課金されません。
空白と句読点は変換されますか?
いいえ。 回転されるのはA–Z、a–z、数字0–9のみです。空白・句読点・その他は変更なく通ります。
123が678になるのはなぜですか?
各数字が0から9の輪の上で5つ進むためです。1は6に、2は7に、3は8になります。5は10の半分なので、もう一度かけるとどの数字も元の値に戻ります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/rot18 \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Hello, World! 123"}'const res = await fetch("https://api.kit.forhosting.com/enc/rot18", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Hello, World! 123"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/rot18",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Hello, World! 123"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/rot18", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Hello, World! 123"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Hello, World! 123"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/rot18", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "Hello, World! 123"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.rot18",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
空入力は明確なinvalid_inputエラーで拒否され、スクリプトが空白欄を静かに無操作として扱わないようにします。無料のブラウザツールと有料APIは純粋な同型関数を共有するため、授業デモ・CTFウォーミングアップ・自動パイプラインは同一テキストで常に同じ出力に一致します。
送る内容と返ってくる内容
検証失敗はプリペイド残高を消費しません。古典的な確認には Hello, World!123 を Uryyb, Jbeyq!678 に変換し、同じ変換をもう一度適用して元を取り戻し、空の text がそのまま返らず拒否されることの確認が含まれます。変換したいメッセージを含む必須文字列フィールド text を送ってください。input、value、data、message、plaintext、ciphertext などの別名も同じフィールドとして受け入れられ、既存のペイロード形を再利用できます。成功時の応答は元の text を返し、result をROT18文字列、その結果の length、回転した字母・数字の個数 letters_rotated と digits_rotated、クライアントがROT18プロファイルに当たったと主張できる alphabet・cipher・self_inverse ラベルを返します。text の欠落、非文字列オブジェクト、空文字列、文書化された最大長を超える文字列は invalid_input と明確な英語メッセージで失敗します。成功したAPI呼び出しの料金は公開ベースのアイテムあたり $0.002 です。
実務でROT18ツールが現れる場面
本機能は純粋なparseエンジンなので、API料金は成功アイテムあたり公開ベースの $0.002 で、失敗した検証は残高を消費しません。
連携の活用例
ネタバレとラベルの軽い難読化
文字と数字を含むクイズ解答やチケット風ラベルを回転し、ブラウザまたはAPIの同じ呼び出しで復元します。
技術的な質問
料金はいくらですか?
ブラウザツールは無料でローカル実行です。APIリクエストは成功アイテムごとに $0.002 のプリペイドKIT残高を使い、無効入力は課金されません。