Playfair暗号
キーワードMONARCHYでINSTRUMENTSを暗号化するとGATLMZCLRQXAになります。文字を2つずつ組にし、奇数の末尾はXで補い、5×5の正方形の中で置き換えます。同じキーワードで復号すれば文字が戻ります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- INSTRUMENTS
- キー
- MONARCHY
- 計算モード
- Encrypt
- 結果
- GATLMZCLRQXA
- 入力
- INSTRUMENTS
- 使用キー
- MONARCHY
- 正規化
- INSTRUMENTS
Playfair暗号は、現代暗号よりはるかに前に現場用途で考案された古典的なダイグラフ換字方式です。1文字ずつ写像するのではなく、秘密のキーワードから構築する5×5の正方形から取った文字の対で処理します。空でないキーワード、保護または復元したい本文、encrypt または decrypt のモードを入力してください。ツールは文字を正規化し、25マスの格子に収めるために J を I に統合し、反復文字の間と奇数長メッセージの末尾に伝統的な X フィラーを挿入し、その後3つの Playfair 規則—同一行でのシフト、同一列でのシフト、またはその2文字が作る長方形の残りの2角—を適用します。
キーワード正方形とダイグラフ規則の仕組み
Playfair は、まずキーワードをラテン文字上の5×5行列に変換し、I と J が1マスを共有するため25個の相異なる記号が残ります。キーワードの文字は左から右・上から下へ書き、重複を飛ばし、すべての J を I として扱います。未使用の残りのアルファベットが順に格子の残りを埋めます。
平文は大文字のみに縮められ、ダイグラフに詰められます。同じ文字が2回入る対になりそうな場合は最初の出現の後に X を挿入して対を割り、最終ストリームが奇数長なら末尾に X を付けます。暗号化は各対を辿ります。
両文字が同一行ならそれぞれ右へ1マス(循環)、同一列なら下へ1マス(循環)、それ以外は2文字が長方形を定義し、各文字は同じ行で相手の列にある文字に置き換わります。復号は行・列シフトを逆向き—左または上へ1マス—にし、長方形規則はそれ自身の逆です。
実用のコツ、制限、関連検索
正方形がほぼアルファベット順にならないよう、複数の異なる文字を持つキーワードを選んでください。短い覚えやすい語でもデモには足りますが、ユニークな文字の多い長い句の方が行列をより混ぜます。スペース・句読点・数字は暗号化前に除去されるため、電話番号や混在ラベルは文字ストリームで区切りを失います—後で必要なら事前に分割するか別途符号化してください。
復号時は文字のみの暗号文(正規化後に偶数長)を渡します。印刷ワークシートのスペースが残っていても solver は無視します。往復チェックが最良の健全性試験です。
句を暗号化し、同じ鍵で復号し、フィラー付き正規化平文と比較してください。教育では例を組み合わせます。教育やパズル向けの透明な古典ダイグラフ暗号が必要なときにこの機能を選び、本当の秘匿が必要なら現代の認証付き暗号を使ってください。
活用例
CTF とパズルの write-up
出題者が公開キーワードに対する Playfair の暗号化・復号手順を、別のオフラインスクリプトなしで検証します。
歴史的暗号のデモ
博物館やブログが、共有キーワードで来場者の句をライブ暗号化し、ダイグラフ暗号が単アルファベット換字とどう違うかを示します。
よくある質問
Playfair 暗号とは何ですか?
古典的なダイグラフ暗号です。キーワードから作る 5×5 正方形を使い、文字を対で暗号化します。規則は同一行・同一列・長方形を扱います。
なぜ I と J が同じなのですか?
5×5 格子は26文字に対して25マスしかありません。古典 Playfair は I と J を1マスに統合し、すべてのラテン文字が写像されるようにします。
キーが空だとどうなりますか?
正方形を構築するには A–Z 文字を少なくとも1つ含むキーワードが必要です。
二重文字と奇数長はどう処理されますか?
暗号化時、対になるはずの同一文字の間に X を挿入し、奇数長の文字ストリームには末尾の X を付け、各単位がダイグラフになるようにします。
Playfair暗号はどう復号しますか?
同じキーワードで暗号文を入力し、復号を選びます。同じ行の文字は1つ左へ、同じ列の文字は1つ上へ戻り、長方形の規則はそのまま使います。補ったXは結果に残ります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/playfair \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"HIDE THE GOLD","key":"MONARCHY"}'const res = await fetch("https://api.kit.forhosting.com/enc/playfair", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "HIDE THE GOLD",
"key": "MONARCHY"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/playfair",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "HIDE THE GOLD",
"key": "MONARCHY"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/playfair", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"HIDE THE GOLD","key":"MONARCHY"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"HIDE THE GOLD","key":"MONARCHY"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/playfair", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "HIDE THE GOLD",
"key": "MONARCHY"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.playfair",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_chars | 100000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
空のキーワードは明確な invalid_input エラーで拒否され、空白のフォーム欄が無意味な恒等変換を静かに返すことはありません。経路は純粋に決定的な文字算術であり、ネットワークも乱数シードも壁時計依存もなく、無料のブラウザ実行と前払い API は、教育、CTF の write-up、歴史的暗号ドリルのたびに、正方形とダイグラフ一覧を含む同じ JSON を返します。
API の呼び出し方と返却内容
key は空でなく、正規化後に少なくとも1つの A–Z 文字を含む必要があります。text も非文字除去後に少なくとも1文字が残る必要があります。必須の文字列フィールド text と key、省略時に encrypt となる任意の mode を含む JSON 本体を送ってください。text の受理エイリアスには input、value、data、message、plaintext、ciphertext があり、key は keyword、passphrase、secret、k も受け付け、mode は operation、op、direction、action を受け、encode や decode などの一般的な同義語も認識します。空白や数字・句読点だけのキーは invalid_input で課金されません。成功時の応答は元の text と key をエコーし、key_used を正方形順の相異なるキーワード文字、mode を encrypt または decrypt、normalized を文字のみのストリーム、digraphs を実際に処理した2文字単位の配列、result と text を暗号文または復元文字、square を5行×5文字、pairs をダイグラフ数、length を出力文字数、formula を短い規則の覚え方、message を1行の要約として報告します。料金は成功リクエストごとに定額 $0.002(単位 item、限界単価ゼロ)です。
実用のコツ、制限、関連検索
Worker メモリを抑えるため、ペイロードは公開上限の10万文字未満に保ってください。MONARCHY のような古典キーワードと短い句で長方形・行移動を示し、二重文字の語で X フィラーを示し、空キーで厳格な invalid_input 経路を示します。このページは Playfair 暗号、ダイグラフ暗号化、キーワード正方形ツールをオンラインで探す人向けであり、AES でも現代のパスワード保管庫でも ROT13 でも Polybius タップコード変換でもありません。invalid_input を返す失敗タスクは前払い残高を消費しないため、クライアントが空キーを試す探索スクリプトのコストを抑えられます。
連携の活用例
授業での古典暗号ラボ
学習者が手でキーワード正方形を作り、短い文を暗号化し、ダイグラフと最終ストリームを決定的な API 結果と照合します。
技術的な質問
Playfair 暗号は無料ですか?
ブラウザツールは無料でローカル実行です。API 呼び出しは成功リクエストごとに $0.002 の前払い KIT 残高を使い、失敗タスクは課金されません。