オートキー暗号
短い最初の鍵のあとにメッセージ自体を続けるオートキー暗号です。鍵KEYなら鍵の並びはKEYHELLOWOとなり、Hello, World!はRijss, Hzfhr!になります。空白や記号はそのままです。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- Hello, World!
- キー
- KEY
- 計算モード
- Encrypt
- 結果
- Rijss, Hzfhr!
- キー文字
- KEY
- キーの長さ
- 3
- 実行鍵の文字
- KEYHELLOWO
オートキー暗号は、Vigenère系の古典的な多表式暗号で、短い初期キーワードを繰り返す代わりに、メッセージ自体で拡張していく方式です。テキストと、少なくとも1文字のラテン文字を含む初期キー、そして encrypt または decrypt のモードを指定すると、A〜Zとa〜zの文字だけが法26の加算・減算で移動し、数字・空白・句読点などの文字はそのまま保たれるため、可読な構造が残ります。暗号化では、実行鍵は初期キーに平文の文字を順に連ねたものになり、復号では同じ初期キーに、それまでに復元された文字が続きます。これにより、受信者は平文全体を事前に保持せずに鍵ストリームを再構築できます。ネットワーク呼び出しも乱数シードもありません。
オートキー暗号がメッセージから実行鍵を作る仕組み
オートキーは、繰り返しキーワードのVigenèreを改良し、短い初期キーのあとにメッセージを鍵ストリームへ連鎖させます。初期キーとメッセージの各ラテン文字を、0から25までのインデックスに対応させます。暗号化では、実行鍵の先頭は初期キーの文字列で、それを使い切ると、次の鍵文字は直前に暗号化した平文の文字になります。
各英字の暗号文は、平文のインデックスに鍵のインデックスを足して26で割った余りで、大文字は大文字のまま、小文字は小文字のまま書き戻されます。A〜Zとa〜z以外の文字――空白、カンマ、数字、絵文字、基本ラテン圏外のアクセント付き文字など――は変更されずにコピーされ、鍵ポインタを進めません。これは、文の英字の骨格だけが撹拌される教科書の表と同じ動作です。
復号はこの加算を逆にたどります。暗号文の各文字から現在の鍵文字を引き、26で割った余りが平文の文字になり、その復元された文字が次の英字ステップのために実行鍵に追加されます。初期キーには少なくとも1文字のラテン文字が必要です。
数学的には、すべてのステップが26文字の固定アルファベットに対する整数の剰余演算であり、鍵の浮動小数点丸め、ネットワーク呼び出し、乱数シード、時刻依存はありません。
オートキー暗号ツールが実務で登場する場面
暗号学入門の講義では、シーザー暗号と繰り返しキーワードのVigenèreのあとにオートキーが紹介され、短い初期キーが現代のブロック暗号を持ち出さずに長い非繰り返しの鍵ストリームの種になりうることを学生に示します。
Capture-the-flagのウォームアップやパズルハントでは、いまもオートキーやその変種のメッセージが隠されており、解答者が求めるのは汎用の暗号解析スイートではなく、初期キー+メッセージの高速で予測可能な変換です。
サポートやコンテンツのチームは、ネタバレやクイズの答え、内部ラベルを古典的な初期キー暗号で軽く難読化し、言語固有の暗号ライブラリを入れずに逆変換したいことがあります。
1文字固定のシーザーシフト、相互性のあるBeaufortのキーワード対応、強力な認証付き暗号、Base32やBase64エンコーディング、頻度分析による自動鍵復元が必要な場合は、それらを別の検索意図・別ページとして扱い、この古典オートキーのページに詰め込まないでください。
活用例
授業でのオートキーのデモ
既知の初期キーで例文を暗号化・復号し、使い捨てスクリプトを書かずに、初期キー+平文の鍵ストリームを入門の暗号学の授業で示せます。
パズルやCTFのオートキー問題
古典的な多表式の動作を期待する課題チェッカーやCTFのウォームアップのために、問題の文字列にオートキーの初期キーを適用・逆変換します。
よくある質問
オートキー暗号とは何ですか?
短い初期キーワードをメッセージ自体で拡張する、古典的な多表式暗号です。暗号化は C = (P + K) mod 26、復号は P = (C - K) mod 26 を使い、復元された平文が鍵を延長します。
オートキーの暗号文はどう復号しますか?
同じ機能を mode decrypt で呼び出し、暗号文を text に、元の初期キーを key に指定します。実行鍵は初期キーと、復元された各平文文字から再構築されます。
キーが空だとどうなりますか?
初期キーワードには少なくとも1文字のラテン文字 A–Z または a–z が必要で、空や英字なしのキーは拒否され、課金もされません。
空白や句読点は暗号化されますか?
いいえ。 変換されるのは A–Z と a–z のみです。空白、数字、句読点、その他の文字はそのまま通過し、実行鍵を進めません。
料金はいくらですか?
ブラウザツールは無料でローカルに動作します。無効な入力は課金されません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/autokey \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Hello, World!","key":"KEY"}'const res = await fetch("https://api.kit.forhosting.com/enc/autokey", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Hello, World!",
"key": "KEY"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/autokey",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Hello, World!",
"key": "KEY"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/autokey", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Hello, World!","key":"KEY"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Hello, World!","key":"KEY"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/autokey", 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!",
"key": "KEY"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.autokey",
"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のウォームアップ、自動化パイプラインのいずれでも、同じ入力には常に同じ変換結果が返ります。
オートキー暗号がメッセージから実行鍵を作る仕組み
空、空白のみ、数字のみのキーは、恒等変換として振る舞うのではなく invalid_input で失敗します。同じテキスト・キー・モードには常に同じJSONが返ります。このページが実装するのは古典的なオートキーのみで、固定シフトのシーザー暗号、Beaufortの減算、AES、自動鍵復元クラッカーではありません。それらは別のツールであり、別の検索意図に対応する独立したページがあります。
送信するものと返ってくるもの
text は、単純な恒等チェックだけが目的なら空でも構いませんが、key は英字フィルタ後に空であってはなりません。検証失敗はプリペイド残高を消費しません。典型的な確認としては、初期キー KEY で Hello, World!を暗号化し、同じ key で暗号文を元のフレーズに復号し、空のキーが無操作として扱われず拒否されることを確かめる、というものがあります。必須の文字列フィールド text、必須の文字列フィールド key、そして省略時に encrypt が既定となる任意の mode を送信します。mode に受け付けられる値は encrypt と decrypt に加え、enc、dec、encode、decode などの一般的なエイリアスです。空白のみの文字列や、数字・記号だけを含むキーは invalid_input で失敗し、キーが空であってはならない要件に触れた明確な英語メッセージが返ります。成功時のレスポンスには、mode、元の text と key、実際に使われた大文字A–Zの初期キー列 key_letters、その初期キーの英字位置の数 key_letters に対応する key_length、このメッセージで消費された大文字の完全な鍵列 running_key_letters、変換後の文字列 result、その長さ length、移動した英字の数 letters_transformed に加え、alphabet と cipher のラベル、そしてクライアントが適用プロファイルを検証できる formula 文字列が含まれます。text や key の欠落、いずれかのフィールドが文字列でない場合、未知の mode、文書化された最大長を超える文字列は invalid_input で失敗します。成功したAPI呼び出しの料金は公開されている基本額で1要素あたり$0.002です。
オートキー暗号ツールが実務で登場する場面
この機能は純粋なparseエンジンなので、API料金は公開されている基本額で成功1要素あたり$0.002であり、検証失敗は残高を消費しません。
連携の活用例
ネタバレやラベルの軽い難読化
クイズの答えや内部ラベルを古典的な初期キーで撹拌し、あとでブラウザまたはAPIの同じコントラクトで元に戻します。