Grandpré暗号
CODE、ABLE、FISH、TRAPの4行を使うと、CATは112141になります。各文字は、ご自身で作った格子での行番号と列番号の組に置き換わり、復号では数字の組が文字に戻ります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- CAT
- 単語
- CODE, ABLE, FISH, TRAP
- 計算モード
- Encrypt
- 結果
- 112141
- 長さ
- 6
- 対応付けた文字
- 3
- ペア
- 3
Grandpré暗号は、キーワード行でできた格子上の座標で各文字に番号を付ける古典的な同音置換です。市松模様の各行を埋める語を用意し、平文または数字ペア列を貼り付け、暗号化または復号を選びます。暗号化はメッセージのラテン文字を順にたどり、行優先で最初に一致したセルの2桁の行列表ラベルに置き換えます。復号は数字を集め、2つずつ読み、同じ格子で各ペアを逆引きします。同じ文字がキーワード行に複数回現れ得るため原理的には同音的で、平文の繰り返し文字が常に同じ符号を共有する必要はありません。一方この実装は常に最初のセルを取るため完全に決定的です。語の一覧がアルファベット全体を覆わない場合でも、存在する文字については成功し、欠けている文字の一覧とともに不完全格子状態を報告するので、盤を広げられます。
Grandpréキーワード行が座標ペアになる仕組み
Grandpréの正方形は、1行に1語を並べ、各セルがラテン文字1字だけを持つように組み立てます。古典的な説明では10×10の盤を好み、10語が第1列で11番目の語をなすことが多いですが、同じ文字数のキーワード行からなる任意の長方形集合でも同じです。非文字を取り除き、大文字化し、各行が2から10列の同じ幅になるよう求め、行数は最大10です。
軸は1から番号付けされ、一辺が10セルのとき10番目のラベルは数字0で、教科書の1–9–0慣例に一致します。暗号化は各平文字を、行ラベルに列ラベルを続けた2桁符号に置き換えます。同じ文字が格子に複数ある場合、このツールは左から右・上から下の最初の一致を常に選ぶため、同一入力は乱数なしで常に同じ数字列になります。
復号は表引きを逆にし、入力から数字を順に集め、2つずつ行ラベルと列ラベルとして消費します。奇数個の数字、有効軸外のラベル、セルを指さないペアは直ちに失敗します。平文の非文字は暗号化時に飛ばされ、暗号文は座標数字だけになります。
復号時の非数字は無視しつつ数字列を組み立てます。アルファベットの合同シフトも第二の加算鍵もなく、開かれたキーワード格子だけなので、その行をどれだけ完全かつ丁寧に選ぶかが成否を決めます。
実務でGrandpréツールが使われる場面
暗号入門の授業やパズルクラブは、機械暗号に入る前に同音座標置換を練習させるため、今もGrandpré風の格子を課題にします。明示的なキーワード行から暗号化・復号する信頼できるオラクルはデモと自動採点を速めます。
Capture-the-flag のウォーミングアップやジオキャッシュ課題は、公開された語の正方形のそばに数字ペアのメッセージを隠し、解答者は一般的な暗号解析スイートより、速く予測可能な最初一致エンコーダを求めます。
コンテンツとサポートのチームは、共有語リスト上の座標ペアとしてネタバレ、クイズ答え、内部ラベルを軽く符号化し、言語別の暗号ライブラリなしで逆経路を要します。
キーワードなしの固定5×5ポリュビオス正方形、Playfair の2文字正方形、Nihilist の加算層、Caesar や Vigenère の文字シフト、暗号文だけからの未知Grandpré盤の自動復元が必要な場合は、別の検索意図とランディングとして扱い、このキーワード行座標暗号のページに詰め込まないでください。
活用例
授業での同音座標デモ
公開されたキーワード行格子で例語を暗号化・復号し、暗号入門の授業が同じ正解マッピングと不完全格子の被覆報告を共有できるようにします。
パズルとCTFの数字ペア課題
既知の語の正方形に対してGrandpré座標ストリームを符号化または逆変換し、問題集ごとに使い捨てスクリプトを書かずに済みます。
よくある質問
Grandpré暗号とは何ですか?
キーワード行の格子に文字を置き、各平文字を一致するセルの2桁の行列表座標に置き換える古典的な同音暗号です。
格子はどう渡せばよいですか?
words を文字列の配列として渡し、各要素がキーワード1行です。非文字を除いたあと全行の文字数は同じでなければなりません。2×2から10×10まで受け付けます。
不完全格子とは何を意味しますか?
存在する文字の暗号化は続き、平文が欠けた文字を要する場合だけ失敗します。
同じ文字が複数あるときどの座標が選ばれますか?
行優先(左から右、上から下)の最初のセルです。暗号化は決定的で乱数なしのまま、盤上の同音は許されます。
料金はいくらですか?
ブラウザツールは無料でローカル実行です。無効入力は課金されません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/grandpre \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"CAT","words":["CODE","ABLE","FISH","TRAP"]}'const res = await fetch("https://api.kit.forhosting.com/enc/grandpre", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "CAT",
"words": [
"CODE",
"ABLE",
"FISH",
"TRAP"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/grandpre",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "CAT",
"words": [
"CODE",
"ABLE",
"FISH",
"TRAP"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/grandpre", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"CAT","words":["CODE","ABLE","FISH","TRAP"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"CAT","words":["CODE","ABLE","FISH","TRAP"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/grandpre", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "CAT",
"words": [
"CODE",
"ABLE",
"FISH",
"TRAP"
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.grandpre",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
無料のブラウザツールと有料APIは同一の純関数を共有するため、授業デモ、パズル下書き、自動フィクスチャは同じ語と文に対して常に同じ座標で一致します。
Grandpréキーワード行が座標ペアになる仕組み
渡した語に一度も現れない文字は暗号化できず、要求は invalid_input で失敗し、代用を捏造せず不完全格子の欠落を示します。
送る内容と返ってくる結果
検証失敗は前払い残高を消費しません。古典的な確認では、4×4の例 CODE, ABLE, FISH, TRAP で CAT を6桁ストリームに暗号化し、それを CAT に戻し、G や Z が欠けると incomplete が true になること、5桁の暗号文を黙って切らずに拒否することを含みます。必須の文字列フィールド text、格子の各行に1つのキーワード文字列を持つ必須配列フィールド words、および encrypt または decrypt に設定する任意フィールド mode を送ってください。mode を省略すると既定は encrypt で、最小のペイロードでも座標ペアが得られます。成功時は mode と text をエコーし、result に数字列または復元した大文字、length にその長さ、letters_mapped と pairs に使ったセル数、digit_count に座標ストリームの桁数、rows と cols に格子サイズ、grid に正規化した大文字のキーワード行、incomplete に真偽値、missing_letters に盤にない A–Z、alphabet_coverage に語が供給する相異なる文字数、row_labels と col_labels に軸の短い文字列、cipher に grandpre を返します。text や words の欠落、2行未満、10行超、ラテン文字のない行、非文字除去後の行長の不一致、未対応の mode、文書化された上限を超える文字列、文字のない暗号化、数字のない復号、奇数個の数字、ラベル軸外の座標ペアはすべて invalid_input と明確な英語メッセージで失敗します。成功した API 呼び出しの料金は公開ベースの1件 $0.002 です。
実務でGrandpréツールが使われる場面
この能力は純粋な parse エンジンなので、API 料金は成功1件あたり公開ベースの $0.002 で、検証失敗は残高を消費しません。
連携の活用例
共有語リストによるラベル符号化
合意したキーワード一覧の上行列表の数字ペアにクイズ答えや内部ラベルを変換し、同じ契約でブラウザまたはAPIから後で復号します。