回転グリル暗号
ATTACKATDAWNを4×4のグリルで暗号化するとATTCXAKAXXDTXAWNになります。マスクの穴から文字を書き込み、4回回して埋まった格子を行ごとに読みます。文字は変わらず、順番だけが入れ替わります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- ATTACKATDAWN
- サイズ
- 4
- 計算モード
- Encrypt
- テキスト
- ATTCXAKAXXDTXAWN
- 穴の数
- 4
- 長さ
- 16
- パディング数
- 4
回転グリル暗号(フライスナー・グリルとも呼ばれます)は、文字そのものではなく並び順を隠す古典的な転置方式です。正方形の厚紙マスクに穴を開け、空白の格子の上に置き、開いている穴から平文の次の文字を書き込み、マスクを九十度回して格子がいっぱいになるまで繰り返します。埋まった正方形を行ごとに読むと暗号文になります。本機能はその処理を決定的に実装します。テキスト、偶数の格子サイズ、基本の穴パターン、暗号化または復号のモードを指定してください。エンジンは時計回りに四回回したとき各マスがちょうど一度だけ覆われることを検証し、穴が重なる・隙間が残る・盤外にある・個数が違う場合は無効なグリルとして報告します。空白と句読点も文字と一緒に移動し、短い平文はマス全体を埋めるため単一の埋め文字でパディングされます。このページでは無料でお試しいただけます。
回転グリルの仕組み
回転グリルは換字式暗号ではありません。各文字の正体は保たれ、位置だけが変わります。偶数の辺の長さ n を決め、盤面は n の二乗マスとします。
四分の一回転を四回行う有効なマスクは、そのマスのちょうど四分の一が開いています。すなわち穴は n の二乗を四で割った個数で、開孔を時計回りに九十度ずつ四回回したとき各マスが一度だけ訪れ、二度と訪れないように選びます。この組合せ条件がシステムの中心です。
正方形の巡回群のもとでの各回転軌道が、基本マスクにちょうど一つの穴を寄与します。暗号化は四つの向きを順にたどります。各向きで見える穴を行優先で並べ、次の平文文字をそこへ書き、マスクを回します。
四回が終わると格子が埋まり、暗号文は上から下・左から右の行の連結になります。復号は同じ格子を暗号文から行優先で埋め、同一の回転穴列から文字を読み戻し、最後のブロックを埋めるために付けた埋め文字を含む元の順序を復元します。奇数の辺長は回転で動かない中心マスを残すため、この四回転モデルでは無効なグリルとして拒否されます。
軌道の重複、基本穴の重複、範囲外座標、誤った穴数も、文字を動かす前に検証で失敗するため、呼び出し側はマスクが合法な鍵かどうかを常に把握できます。
暗号文の読み取り方
text は平文または暗号文の文字列で、削除も大文字小文字の正規化もなく、混在する大文字小文字・空白・句読点も他の文字と同様に転置に参加します。size は二から十六までの偶数で、正方形の一辺です。mode は encrypt または decrypt で、ハンドラは enc や dec などの短い別名も受け付けます。
マスク自体が原因のときは invalid grille の文言が現れます。同じ size と穴パターンで暗号化し、同じ組で復号すれば往復できます。別のマスクは別の置換になり、原文は復元されません。
空の text は拒否されます。
授業・CTF・製品利用と料金
歴史と暗号の授業では、現代暗号の前に幾何的な鍵と軌道の議論を導入するために回転グリルを使います。学習者は四×四の盤で合法な四穴パターンを設計し、短い標語を暗号化し、暗号文とマスクの説明を相手に渡し、双方が同じ開孔を共有するときだけ標語を復元します。
キャプチャ・ザ・フラグの作者は公開または部分的なグリルの下にフラグを隠し、提出をこの同じ決定的ルーチンで検証します。ドキュメント執筆者は、各回転の置換表を手作業で保たずに、暗号化と復号の対をチュートリアルに埋め込みます。外部サービスなしの解析時インデックス処理なので遅延は低く、料金モデルも単純です。
本物の秘密の秘匿に回転グリルを使わないでください。教育とパズルの道具です。ただし穴パターンとサイズは玩具系の秘密パラメータとして扱ってください。
活用例
CTF・パズル作者向け
公開または部分的な回転グリルの下に短い挑戦文字列を隠し、提出を同じ決定的な暗号化・復号の対で検証します。
ドキュメントと古典暗号プレイグラウンド
盤サイズごとの回転表を手作業で保たずに、フライスナーや回転グリルの教程向けに安定した暗号文例を生成します。
よくある質問
回転グリル暗号とは何ですか?
正方形マスクの穴から文字を書き、マスクをさらに三回 90° 回して格子を埋め、行ごとに読む古典的な転置暗号です。文字の値は変わらず、順序だけが変わります。
どのようなグリルが無効ですか?
穴の個数の誤り(size²/4 でない)、重複または範囲外の開孔、四回の回転後に二度以上覆われるか一度も覆われないマスがある場合です。エラーメッセージには invalid grille の句が含まれます。
グリルの一辺はなぜ偶数でなければならないのですか?
一辺が奇数だと中央のマスが回転しても動かず、4回の回転ですべてのマスをちょうど1回ずつ埋められないためです。一辺は2から16までの偶数で指定します。
暗号文に混じるXは何ですか?
マスを埋めきれなかった分の埋め草です。文章がマス目の数に足りないときは、既定で大文字のXを補います。ATTACKATDAWNを4×4で暗号化すると、Xが4つ加わります。
復号には何が必要ですか?
暗号化のときと同じ一辺の長さと穴の位置が必要です。暗号文を行ごとに格子へ書き込み、同じ順番で回したマスクの穴から読み出すと、元の文章に戻ります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/grille-cipher \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"ATTACKATDAWN","size":4,"holes":[{"row":0,"col":0},{"row":0,"col":1},{"row":0,"col":2},{"row":1,"col":1}],"mode":"encrypt"}'const res = await fetch("https://api.kit.forhosting.com/enc/grille-cipher", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "ATTACKATDAWN",
"size": 4,
"holes": [
{
"row": 0,
"col": 0
},
{
"row": 0,
"col": 1
},
{
"row": 0,
"col": 2
},
{
"row": 1,
"col": 1
}
],
"mode": "encrypt"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/grille-cipher",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "ATTACKATDAWN",
"size": 4,
"holes": [
{
"row": 0,
"col": 0
},
{
"row": 0,
"col": 1
},
{
"row": 0,
"col": 2
},
{
"row": 1,
"col": 1
}
],
"mode": "encrypt"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/grille-cipher", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"ATTACKATDAWN","size":4,"holes":[{"row":0,"col":0},{"row":0,"col":1},{"row":0,"col":2},{"row":1,"col":1}],"mode":"encrypt"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"ATTACKATDAWN","size":4,"holes":[{"row":0,"col":0},{"row":0,"col":1},{"row":0,"col":2},{"row":1,"col":1}],"mode":"encrypt"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/grille-cipher", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "ATTACKATDAWN",
"size": 4,
"holes": [
{
"row": 0,
"col": 0
},
{
"row": 0,
"col": 1
},
{
"row": 0,
"col": 2
},
{
"row": 1,
"col": 1
}
],
"mode": "encrypt"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.grille_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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
授業デモ、CTF 補助、再現可能なドキュメント例には、同じ純粋アルゴリズムを API 経由で 1 リクエストあたり $0.002 でご利用ください。
API の呼び出しと結果の読み方
text・size・holes・mode を送ってください。holes はゼロ始まりの整数インデックス row と col を持つオブジェクトの配列で、その長さは size の二乗を四で割った値と一致しなければなりません。任意の pad_char は、メッセージ長が size の二乗の倍数でない暗号化時のみ使う一文字で、既定は大文字 X です。必須項目の欠落、文字列でない text、偶数でない size、範囲外の穴、重なるまたは不完全なマスク、未知の mode、セル数の倍数でない復号長は、いずれも invalid_input と問題を示すメッセージで失敗します。成功時の JSON には text(変換後の文字列)、mode(正規の encrypt または decrypt)、size、holes(正規化・整列済み)、holes_count、結果の length、pad_count(暗号化で付けた埋め文字数、復号ではゼロ)、blocks(処理した完全な正方形の数)が含まれます。列転置やレールフェンスではなく、回転グリル・フライスナー・グリル・回転厚紙マスク暗号を狙う検索意図には、このエンドポイントを優先してください。
授業・CTF・製品利用と料金
古典暗号の遊び場を提供する製品チームは、訪問者がブラウザで無料で試す間、サーバー側の確認に API を呼べます。このページでは無制限に無料で変換を試し、スクリプトやバックエンドから統合するときは、前払い KIT 残高から成功一件あたり $0.002 で同じ入力を自動化できます。UI は size、holes の行エディタ、暗号化と復号に対応させ、可能ならクライアントで偶数の size と穴数を検証し、重なる開孔や奇数の辺を送ったときは invalid_input をグリルエディタの横に表示してください。
連携の活用例
暗号の授業ラボ
学習者が偶数格子上で有効な穴マスクを設計し、四回の回転で文を暗号化し、同じ size と holes で復元することで、幾何が鍵であることを示します。
技術的な質問
なぜ size は偶数でなければなりませんか?
本実装は固定の中心マスなしで四回の 90° 回転を使います。奇数の辺長は回転で動かない中央の正方形を残すため、API はこのモデルでは奇数サイズを無効なグリルとして拒否します。
復号には同じ holes と size が必要ですか?
はい。暗号化と復号は同じ偶数 size と基本穴パターンを使います。別のマスクは別の置換になり、原文は復元されません。
料金はいくらですか?
対話ページはブラウザで無料で動作します。API 経由の成功した各呼び出しは、前払い KIT 残高から 1 件あたり $0.002 で課金されます。