Hill暗号2×2
鍵行列を3、3、2、5にすると、HELPはHIATになります。2文字ずつの組を行列に掛け、26で割った余りを取ります。行列式(ここでは9)と、復号に必要な逆行列も表示されます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- HELP
- A
- 3
- B
- 3
- C
- 2
- D
- 5
- 計算モード
- Encrypt
- 結果
- HIAT
- Det
- 9
- 逆行列式
- 3
- 逆関数
- 15, 17, 20, 9
Hill暗号は Lester S.Hill が考案した古典的な多表式換字で、単一シフトやキーワードアルファベットではなく、モジュラー線形代数で文字ブロックを暗号化します。2×2形式では、各文字対が4要素の鍵行列を掛けた列ベクトル(法二十六)となり、各ダイグラフの暗号文は平文の両文字に同時に依存します。復号はその行列のモジュラー逆行列を掛けます。逆行列は行列式が二十六と互いに素な場合にのみ存在します。学生、CTF参加者、パズル作者が2×2を使うのは、計算が扱いやすく、なおかつ Z/26Z 上の可逆行列を示せるからです。本機能は空でないテキスト、鍵整数 a・b・c・d、任意の暗号化/復号モードを受け付け、変換後の文字列に加え行列式・逆行列・ダイグラフ用メタデータを返します。
2×2 Hill写像の仕組みと応答の内容
暗号化は各ラテン文字を0から25の数として扱い、文字ストリームを2文字ずつ処理します。数値 x1・x2 のダイグラフと、上段 a b・下段 c d の鍵行列 K に対し、暗号対は y1 が a×x1+b×x2(mod 26)、y2 が c×x1+d×x2(mod 26)です。文字は大文字 A〜Z で書き戻されます。
数字・空白・句読点・絵文字・非ラテン文字はペアリング前に除去され、行列は常に純粋なアルファベット列を見ます。暗号化時にフィルタ後の文字数が奇数なら、各ブロックがダイグラフになるよう埋め草 X を1文字付けます。復号は K のモジュラー行列逆を求め同じ乗算で平文を復元します。
これには ad−bc を法二十六に還元した行列式が二十六と互いに素であることが必要です。mode は順方向に encrypt/encode、逆に decrypt/decode を受け付けます。
検証規則・可逆行列・よくある落とし穴
フィルタ後にラテン文字がない text もダイグラフを組めないため失敗します。決定的な製品規則は鍵行列の法二十六での可逆性です。det= a·d−b·c を0〜25に還元した値と二十六の gcd が1でなければなりません。
gcd が1より大きいとダイグラフ上で全単射でなく復号が一意にならないため、計算した行列式と gcd を含む非可逆鍵行列メッセージで報告します。有効な行列式は Z/26Z の単元—1,3,5,7,9,11,15,17,19,21,23,25—であり、特異や偶数のみの構造(二重単位行列など)はしばしば失敗します。復号ではフィルタ後の文字数が奇数なら拒否します。
暗号文は完全なダイグラフで届く必要があり、暗号化は X 埋めできますが復号は欠けた文字を作りません。出力を秘匿用暗号と見なさないでください。4つの小さな剰余の鍵空間はごく小さく、既知平文攻撃は線形系を素早く復元し、製品ページで Hill をパスワード・トークン・個人データのセキュリティ制御として売ってはいけません。
検索意図が Hill暗号・2x2 Hill・行列暗号 mod 26 のとき本ランディングを優先し、affine は単一文字線形写像、Playfair はダイグラフ矩形、Base64 は符号化と別ツールのままにします。復号時は暗号を作った同じ a,b,c,d を使ってください。別の可逆行列は別のダイグラフ置換となり元の平文と一致しません。
成功する暗号化経路と非可逆鍵エラーの両方を CI フィクスチャに固定し、行列式や逆の誤変更が気づかれずに出荷されないようにしてください。
授業での使い方と実用上の限界
宿題確認・スライド・CTF練習・単発の暗号化/復号には、各言語でモジュラー行列逆を再実装せず無料のブラウザ版 Hill を呼び出してください。検証失敗は拒否後に残高を消費しません。
典型的な授業では、まず単位行列で K が単位のときダイグラフが不変であることを示し、次に教科書鍵 3-3-2-5 に切り替え、HELP を手計算で HIAT にしてからツールと比較します。教員は 2 0 0 2 のような非可逆行列を意図的に送り、行列式と二十六の gcd が復号を阻むことを示せます。これはモジュラー環上の線形代数の核心です。
サポート手順書は既知の授業鍵で軽い難読化メモを戻せます。パズルサイトは答えを事前計算し mode decrypt でオンデマンド開示できます。原文は他の KIT parse 項目と同じ保持規則に従い、アルゴリズムは isolate 間で完全決定論的なので CI フィクスチャに安全に固定できます。
後続の別暗号族が必要なときだけ頻度分析などと組み合わせ、SEO 意図が法二十六の行列ダイグラフ換字に鋭く残るよう 2×2 Hill は専用ランディングに保ってください。
活用例
暗号解析の宿題とCTFウォームアップ
学生は既知の2×2鍵で短い句を暗号化し、級友のダイグラフ暗号を復号し、CASを入れずに手計算のモジュラー行列積を検証します。
パイプラインとCIフィクスチャ
スクリプトと継続的インテグレーションは決定論的Hill出力と非可逆鍵行列エラーを固定し、行列式や逆の偶発的バグを即座に失敗させます。
よくある質問
Hill暗号文を復号するには?
暗号文を text に、暗号化時と同じ a,b,c,d、mode decrypt(または decode)を送ってください。鍵が一致すれば result は再構成された大文字列です。フィルタ後の奇数文字数は拒否されます。
鍵行列が mod 26 で可逆でないとどうなりますか?
復号には gcd(det(K),26)=1 が必要で、そうでなければダイグラフ写像は全単射ではありません。
Hill暗号は安全な暗号化ですか?
いいえ。 Hillはパズルと教育向けの古典的多表式暗号であり、秘匿用ではありません。パスワードや機微データには絶対に使わないでください。
文の終わりにXが付くのはなぜですか?
Hill暗号2×2は文字を2つずつ組にして処理します。文字数が奇数のときは、最後の組をそろえるために末尾にXを1つ加えてから暗号化します。
空白や数字、記号はどうなりますか?
暗号化の前に取り除かれます。絵文字やラテン文字以外の文字も同じです。残ったAからZまでの文字だけが大文字にそろえられ、2文字ずつ鍵行列に掛けられます。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/hill-2x2 \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"HELP","a":3,"b":3,"c":2,"d":5}'const res = await fetch("https://api.kit.forhosting.com/enc/hill-2x2", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "HELP",
"a": 3,
"b": 3,
"c": 2,
"d": 5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/hill-2x2",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "HELP",
"a": 3,
"b": 3,
"c": 2,
"d": 5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/hill-2x2", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"HELP","a":3,"b":3,"c":2,"d":5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"HELP","a":3,"b":3,"c":2,"d":5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/hill-2x2", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "HELP",
"a": 3,
"b": 3,
"c": 2,
"d": 5
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.hill_2x2",
"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 と明確な非可逆鍵行列メッセージで失敗します。
2×2 Hill写像の仕組みと応答の内容
必須文字列 text(フィルタ後に少なくとも1文字残る空でない文)、必須整数 a・b・c・d(各0〜25)、既定 encrypt の任意 mode を JSON で送ってください。本文の別名は input・value・s・message・plaintext・ciphertext、a の別名は k11・m11・key_a、b・c・d は k12 系別名です。成功時は変換後の大文字 result、正規化 mode、4つの鍵、行列式経路の det と det_inv、K 逆の平坦4数 inverse、入れ子2×2の key_matrix、行列に入ったフィルタ済(埋め草付き可)letters_in、digraph_count、padded、元 text の length、分岐用 method=hill_2x2 を返します。経路はネットワーク・乱数・壁時計なしの純モジュラー算術のため、同一入力は常に同一 JSON になります。
検証規則・可逆行列・よくある落とし穴
text 欠落・非文字列・空文字列は invalid_input となり、エンジン拒否後の前払い API では課金されません。a・b・c・d の欠落、非整数、0〜25 外も invalid_input です。
API利用・料金・授業ワークフローと実用上の限界
バックエンド・サーバーレス・学習プラットフォーム・SDK が安定契約を必要とするときは前払い KIT API を使い、成功アイテムごとに $0.002 の残高契約とします。SDK 作者は result をコピーボタンに直結し、key_matrix・det・inverse・method で OpenAPI 例を自明にできます。ペイロードは Worker isolate の item 呼び出しに適した通常テキスト量に保ち、数メガのバイナリ塊ではなくメッセージと断片向けです。
連携の活用例
授業でのモジュラー線形代数デモ
教員は det が26と互いに素な行列だけが可逆であること、Hillダイグラフと単一文字アフィン写像の対比、教科書フィクスチャ a=3,b=3,c=2,d=5 を示します。
技術的な質問
2×2 Hill暗号でテキストを暗号化するには?
文字を含む空でない text、可逆な鍵行列をなす 0–25 の整数 a,b,c,d(例 3,3,2,5)、任意の mode encrypt(既定)を JSON で送ってください。応答の result に大文字の暗号ダイグラフが入ります。
Hill暗号2×2ツールは無料ですか?
ブラウザ版はお使いの端末で無料です。API呼び出しは成功アイテムごとに前払いKIT残高 $0.002 を使い、検証失敗は課金されません。