キーワード換字式暗号
キーワードCRYPTOを使うと、Hello WorldはBtggj Vjmgpになります。キーワードが暗号用アルファベットの先頭に来て、残りの文字が順に続き、各文字が対応する文字に置き換わります。同じキーワードで復号でき、ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- Hello World
- キーワード
- CRYPTO
- 操作
- Encrypt
- 結果
- Btggj Vjmgp
- アルファベット
- CRYPTOABDEFGHIJKLMNQSUVWXZ
- 対応文字数
- 10
授業のデモ、パズル制作、CTFのウォームアップ、短いメモの可逆的な難読化に、古典的なキーワード暗号が必要ですか。メッセージと、A〜Zの重複しない文字から成るキーワードを入力してください。ツールはキーワードを先頭に置き、残りの文字を順に埋めて混合アルファベットを作り、各文字を換字しつつ大文字・小文字を保ち、句読点・スペース・数字はそのまま残します。同じキーワードで暗号化か復号を選べば、往復は正確に保たれます。
キーワード換字アルファベットの作り方
単一換字式暗号は、アルファベットのすべての文字をちょうど1つの別の文字に置き換え、その対応をメッセージ全体で固定します。対応がキーワードで種付けされると、キーワードの文字が暗号アルファベットの先頭に(各文字は一度だけ)現れ、A〜Zの残りの文字が自然な順序で続きます。
たとえばキーワードCRYPTOは、26文字のアルファベットCRYPTOABDEFGHIJKLMNQSUVWXZを生みます。平文AはCに、BはRに、CはYに、以下Zまで写像されます。復号は同じ表を逆にします。
すなわち各暗号文の文字を混合アルファベットで探し、同じ位置の平文の文字に置き換えます。文字以外の文字が対応表に入ることはなく、そのまま複写されるため、日付、コード、句読点は読める状態で残ります。キーワードは各文字を高々一度しか使えないため、この構成は曖昧さがありません。
手作りの表と機械の出力を比べる学生を驚かせるような、黙った重複除去はありません。同じ文字の大文字形と小文字形は1つの対応エントリを共有し、エンジンは各元文字の大小を保つため、HELLOとhelloは同じアルファベットに対して一貫して暗号化されます。
この古典的な構成は現代の暗号より弱く、教育、パズル、軽い難読化のためのものであって、保存中や転送中の秘密を守るためのものではありません。
暗号化・復号とキーワードの検証
キーワードは前後の空白が除去され、スペース・数字・記号のないA〜Zの文字のみを含む必要があります。いずれかの文字が2回以上現れる場合、呼び出しは重複した文字を名指しして失敗するため、黙って変えられたアルファベットを受け取る代わりにキーを修正できます。
成功時、応答は元のテキスト、正規化された大文字のキーワード、使用したaction、26文字の完全な混合アルファベット、変換後の結果文字列、そして写像された英字の個数を返します。encryptは平文の文字を平文アルファベットを通じて混合アルファベットへ走査し、decryptは逆方向へ走査します。
同じキーワードでencryptしてからdecryptする往復は、元の文字の大小と文字以外の文字を正確に復元します。公開面が安定するまでステータスはベータですが、換字の規則はこの固定された古典的構成に従い、同一の入力に対して変わることはありません。
キーワード暗号を使うときのヒント
テキストがすでにこの同じキーワードアルファベットで生成された暗号文である場合は、action decryptをお使いください。欠落したキーワードや重複した文字といった検証失敗は残高を消費しません。手法を教えるときは重複しない文字の短く覚えやすいキーワードを、娯楽用パズルでより密なかき混ぜが欲しいときは重複しない文字の長めのキーを推奨します。
この暗号をAESや認証付き暗号の代替として扱わないでください。頻度分析は長めの英文で単一換字の対応を破ります。ツールを授業ノートやパズルの説明と組み合わせれば、学生は安定した基準に対して手作業を検証できます。
活用例
教室での暗号デモ
キーワードが混合アルファベットをどう作るか、暗号化と復号が同じ単一換字の対応をどう逆にするかを、学生に見せます。
パズルとCTFのウォームアップ
既知のキーワードで、スカベンジャーハント、脱出ゲーム、入門的な暗号チャレンジ向けに可逆的な暗号文を生成します。
軽い可逆的難読化
本物の暗号ではなく手早い往復の写像が必要なとき、共有キーワードで短いラベルやメモをかき混ぜます。
よくある質問
キーワード換字式暗号にはどの入力が必要ですか?
必須のtextとkeywordです。任意のactionはencrypt(既定)またはdecryptです。キーワードは重複しないA〜Zの文字のみである必要があります。
キーワードに重複した文字があるとどうなりますか?
欠落または空のキーワードも同様に失敗します。無効な入力には課金されません。
この暗号は決定論的で安全ですか?
同じテキスト、キーワード、actionに対して完全に決定論的です。これは教育とパズルのための古典的な単一換字式暗号であり、現代の暗号学的安全性ではありません。
キーワードから暗号用アルファベットはどう作られますか?
まずキーワードの文字を1回ずつ並べ、その後に使われていないAからZの文字を通常の順で続けます。CRYPTOならCRYPTOABDEFGHIJKLMNQSUVWXZとなり、AはC、BはR、CはYに置き換わります。
スペースや数字、句読点も変わりますか?
いいえ。置き換えるのは文字だけで、スペースや数字、記号はそのまま写されるので、日付やコードも読めるままです。大文字と小文字も保たれるため、HelloはBtggjになります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/keyword-cipher \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Hello World","keyword":"CRYPTO"}'const res = await fetch("https://api.kit.forhosting.com/enc/keyword-cipher", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Hello World",
"keyword": "CRYPTO"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/keyword-cipher",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Hello World",
"keyword": "CRYPTO"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/keyword-cipher", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Hello World","keyword":"CRYPTO"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Hello World","keyword":"CRYPTO"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/keyword-cipher", 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",
"keyword": "CRYPTO"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.keyword_cipher",
"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で即座に失敗するため、不正な素材が成功した暗号のように見えることはありません。ブラウザーで無料実行するか、同一の決定論的ロジックを成功したリクエストごとに$0.002でAPI経由で呼び出してください。
暗号化・復号とキーワードの検証
必須のtext文字列と必須のkeywordを送信し、任意でactionをencryptまたはdecryptに設定します(既定はencrypt)。除去後にキーワードが欠落または空の場合、呼び出しはinvalid_inputで失敗し、欠落したキーワードを名指しします。
APIの利用、価格、実践的なヒント
textとkeywordを必須フィールドとして機能を呼び出してください。ホスト型APIの価格は、成功したリクエストごとに一律$0.002です。パイプラインでは、各メッセージを独自のタスクとして送信し、通常のwebhookや署名付きリンクのフローで結果を収集してください。自由形式の文章を詰め込むのではなくフィールド名を明示的に保ってください。契約はOpenAPI、SDK型、フォームコントロールと整合し続け、キーとメッセージの曖昧な解析を避けられます。
技術的な質問
成功した応答には何が含まれますか。
元のテキスト、正規化されたキーワード、action、完全な混合アルファベット、結果文字列、そしてletters_mapped(換字されたA〜Z文字の個数)です。
キーワード暗号のAPIの費用はいくらですか。
成功したAPI呼び出しごとに$0.002です。同じエンジンがアカウント不要でブラウザー内で無料実行されます。