乗法暗号
鍵5でHELLOはJUDDSになります。各文字に鍵を掛けて26で割った余りを取り、復号には逆元の21を使います。26と公約数を持つ鍵は受け付けないため、元に戻せない変換は起きません。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- HELLO
- 整数の乗法鍵
- 5
- 計算モード
- Encrypt
- 結果
- JUDDS
- 入力
- HELLO
- 鍵 mod
- 5
- 鍵の逆元
- 21
乗法暗号は、各文字の番号に秘密の整数鍵を二十六で割った余りで掛け合わせる古典的な単一換字方式です。平文のAはゼロ、Bは一、…、Zは二十五に対応し、暗号化ではCはk×Pを二十六で割った余り、復号ではkのモジュラ逆元で元に戻します。保護または復元したい文字列、五や十七のような整数鍵、encryptまたはdecryptのモードを入力してください。
互いに素な鍵とモジュラ乗算の仕組み
乗法暗号は、二十六を法とする整数環で加算を乗算に置き換えたシーザー暗号として理解するのが最も簡単です。各ラテン文字をAのゼロからZの二十五までの整数として書きます。暗号化はその番号に秘密鍵kを掛けて二十六で剰余を取り、復号はkのモジュラ逆元——k×k逆元が二十六を法として一と合同になる唯一の剰余——で掛けます。
その逆元が存在するのは、kの絶対値と二十六の最大公約数が一であるとき、すなわちkが奇数かつ十三の倍数でないときに限ります。有効な正の剰余は一、三、五、七、九、十一、十五、十七、十九、二十一、二十三、二十五で、偶数の鍵や十三の倍数は二十六と因子を共有するため拒否されます。
大文字小文字は保持され、大文字のHに五を掛けるとJ、小文字のhはjとなり、デモの例文が読みやすく保たれます。文字でないもの——空白、カンマ、本文中の数字、絵文字——はそのまま通ります。
実用のヒント、制限、関連検索
写像が全単射になるよう、十二個の有効剰余から鍵を選んでください。鍵一は単体テストに便利な有効な恒等写像で、五、七、十七はよりシャッフルされた教材例を作ります。往復確認が最良の健全性テストです。
句を暗号化し、同じ鍵で復号し、大文字小文字を区別した元の入力と文字列が一致することを確認します。教えるときは例を対にします。教育やパズル用に純粋な乗法鍵の透明な古典的単一換字が必要なときにこの機能を選び、真の秘匿が必要なら代わりに現代の認証付き暗号を使ってください。
活用例
CTFとパズルの検証
出題者は公開された互いに素な鍵について、別のオフラインスクリプトを維持せずに乗法の暗号化・復号を確認できます。
歴史的暗号のデモ
博物館やブログのデモは、二十六と互いに素な鍵だけが可逆写像になる理由を、来場者の句をブラウザでライブ暗号化して示します。
よくある質問
なぜ鍵は26と互いに素でなければならないのですか?
gcd(|key|, 26) = 1のときだけkによる乗算がmod 26で全単射となり、各暗号文字がちょうど一つの平文文字に戻ります。共通因子があるとアルファベットが潰れます。
有効な鍵はどれですか?
絶対値が26と互いに素な任意の整数です。mod 26の正の剰余:1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25。偶数鍵と13の倍数は拒否されます。
空白や句読点も暗号化されますか?
いいえ。 A–Zとa–zだけがmod 26で掛けられます。それ以外の文字はそのまま通ります。
乗法暗号で暗号化した文章はどうやって復号しますか?
暗号文と、暗号化に使った鍵を入力して復号を選びます。鍵が5の場合は逆元の21を掛けて元に戻すので、JUDDSはHELLOに復元されます。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/multiplicative \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"HELLO","key":5}'const res = await fetch("https://api.kit.forhosting.com/enc/multiplicative", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "HELLO",
"key": 5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/multiplicative",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "HELLO",
"key": 5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/multiplicative", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"HELLO","key":5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"HELLO","key":5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/multiplicative", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "HELLO",
"key": 5
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.multiplicative",
"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は、二十六で還元した鍵とその逆元を含む同じJSONを、授業用ワークシート、CTF練習、歴史的暗号デモのたびに返します。
互いに素な鍵とモジュラ乗算の仕組み
空のテキストや鍵の欠落も拒否され、APIが成功に見えてもモジュラ算術を何も教えない恒等変換を返すことはありません。
APIの呼び出し方と返却内容
textは最大十万文字の空でない文字列でなければなりません。必須フィールド二つ——空でない文字列のtextと整数のkey——に加え、省略時はencryptが既定の任意のmodeを持つJSON本体を送ってください。textの別名はinput、value、data、message、plaintext、ciphertextを含み、keyはk、multiplier、a、secret、factorも受け付け、modeはoperation、op、direction、actionを受け付け、encodeやdecodeなどの一般的な同義語も認識します。鍵はJSONの数値または純粋な整数文字列として送れます。分数や非数値文字列はinvalid_inputとなり課金されません。成功時の応答は元の入力textをエコーし、送った整数をkey、ゼロから二十五に還元した鍵をkey_mod、復号に使うモジュラ逆元をkey_inverse、encryptまたはdecryptをmode、変換後の文字列をresultとtext、件数をletters_processedとnon_letters、出力文字数をlength、短いモジュラ記憶法をformula、一行の英語要約をmessageとして報告します。料金は成功リクエストごとに定額$0.002、単位はitem、限界単価はゼロです。
実用のヒント、制限、関連検索
Workerのメモリを抑えるため、ペイロードは公開上限の十万文字未満に保ってください。HELLOを鍵五で暗号化するとJUDDS、同じ暗号文をmode decryptと鍵五で復号するとHELLO、鍵二や十三は二十六と因子を共有するときの厳密なinvalid_input経路を示します。このページは乗法暗号、モジュラ逆元暗号器、互いに素な鍵の文字暗号をオンラインで探す人向けであり、AESでもRSAでも加法オフセット付きの完全なアフィン暗号でもROT13でもありません。invalid_inputを返す失敗タスクは前払い残高を消費しないため、クライアントが偶数鍵や十三の倍数を試しても探索スクリプトは安く保てます。
連携の活用例
授業でのモジュラ算術ラボ
学習者は文字番号を手で掛け、モジュラ逆元を計算し、決定的なAPI出力とkey_inverseフィールドを文字ごとに照合します。
技術的な質問
乗法暗号とは何ですか?
古典的な単一換字暗号です。各文字番号P(A=0 … Z=25)は暗号化でC = (k · P) mod 26になります。復号はkのモジュラ逆元で掛けます。
乗法暗号は無料ですか?
ブラウザツールは無料でローカル実行です。API呼び出しは成功リクエストごとに$0.002の前払いKIT残高を使い、失敗タスクは課金されません。