XOR暗号
テキストを繰り返すキーとXORで組み合わせ、結果を16進数で表示します。「Hello」をキー「key」で暗号化すると 230015070a になり、同じキーで元の文に戻ります。パズルや授業向けで、秘密を守る用途には向きません。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- Hello
- キー
- key
- 計算モード
- Encrypt
- 結果
- 230015070a
- キー長
- 3
- バイト数
- 5
XOR暗号は、排他的論理和演算で各データバイトをキーのバイトと組み合わせる、古典的な繰り返しキーのストリーム暗号です。XORはそれ自身の逆演算であるため、メッセージを乱す同じキーを再度適用すると元に戻ります。decryptモードはその16進数を受け取り、キーストリームを再適用して、キーが一致すればUTF-8テキストを返します。繰り返しキーXORは、CTFの準備練習、ストリーム暗号の授業デモ、パズル本、そして最新の認証付き暗号が過剰な場合の軽い難読化に使われます。空でないテキスト、空でないキー、任意のencryptまたはdecryptモードを入力してください。
検証ルール、空のキー、よくある落とし穴
製品の約束は本物の繰り返しキーストリームであり、キーバイトがゼロではデータは暗号として変更されないか未定義になってしまいます。encrypt、decrypt、encode、decode以外の無効なmode文字列も同様に失敗します。出力を機密性のための暗号として扱わないでください。
繰り返しキーXORは、キーがメッセージに対して短い場合、既知平文攻撃、crib dragging、頻度分析に対して脆弱であり、製品ページはこのツールをパスワード、トークン、個人データのセキュリティ管理として宣伝してはいけません。検索意図がxor暗号、繰り返しキーXOR、XOR暗号化復号hexの場合はこのページを選んでください。
AtbashとROT13は固定アルファベット置換、柵転置は転置、Base64とhex-textはキーなしのエンコーディングに対応するため、別ツールのままです。復号時には暗号文を生成したのとまったく同じキー文字列を使用してください。間違ったキーはUTF-8検証に失敗するか、元の平文と一致しない文字化けを生成します。
授業での使い方と実用上の制限
宿題の確認、講義スライド、CTF練習、一回限りの暗号化・復号の実行には、各言語でキーストリームのループを書くことなく、無料のブラウザXOR暗号をご利用ください。検証の失敗は拒否後に残高を消費しません。
典型的な授業の流れでは、1バイトのキーがバイト上の単純なシーザー風ストリームであることを示し、次にキーを長くして、暗号文の長さがバイト単位で平文の長さに等しく、16進数では文字数が2倍になることを実演します。サポートのプレイブックは、スタッフが既知の共有キーで書いた軽く難読化されたメモを元に戻せます。
パズルサイトは表示用の16進数の答えを事前計算し、mode decryptでオンデマンドに公開できます。後のステップで認証付き暗号が必要な場合にのみ最新の暗号ライブラリと組み合わせ、SEO意図を古典的な繰り返しキー排他的論理和に保つため、XORは独自のページに置いてください。
活用例
CTFとパズルのXOR準備練習
既知の繰り返しキーの下に短いフラグや手がかりを隠し、16進数を公開し、解答者が暗号ライブラリをインストールせずに答えを必要とするときに同じキーで復号します。
よくある質問
XORの16進数暗号文を復号するには?
16進数文字列をtextとして、暗号化に使ったのと同じキー、mode decrypt(またはdecode)を送信します。キーが一致すれば、結果は再構成されたUTF-8平文です。
キーが空の場合はどうなりますか?
繰り返しキーストリームが明確に定義されるよう、空でないキーが必須です。
XOR暗号ツールは無料ですか?
ブラウザツールはお使いのデバイスで無料で動作します。検証失敗は課金されません。
繰り返しキーXORは安全な暗号ですか?
いいえ。 これは古典的な教育・パズル用の暗号であり、秘密の機密性を保つものではありません。パスワードや機密性の高い本番データには決して使用せず、最新の認証付き暗号をご利用ください。
16進数の暗号文が元の文の2倍の長さになるのはなぜですか?
XORの結果は元の文のUTF-8のバイト数と同じ長さで、1バイトを2桁の16進数で表すためです。日本語の文字は1文字で複数バイトになるので、その分だけ暗号文も長くなります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/xor \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Hello","key":"key"}'const res = await fetch("https://api.kit.forhosting.com/enc/xor", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Hello",
"key": "key"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/xor",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Hello",
"key": "key"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/xor", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Hello","key":"key"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Hello","key":"key"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/xor", 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": "key"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.xor",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
この機能は平文をUTF-8としてエンコードし、キーのバイトをペイロード全体に繰り返し適用し、暗号文をコンパクトな小文字の16進数として表示するため、バイナリ結果も安全にコピーできます。空のキーはinvalid_inputで失敗します。
繰り返しキーXORの仕組みとレスポンスの内容
暗号化はまずメッセージをUTF-8バイトに変換し、マルチバイト文字がすべてのisolateで同じように扱われるようにします。キー文字列もUTF-8でエンコードされ、それらのキーバイトはメッセージがキーより長いときに先頭から繰り返されるストリームを形成します。各データバイトは、位置インデックスをキー長で割った余りのキーバイトと排他的論理和され、同じ長さのバイナリ暗号文が生成されます。復号は表示を逆にします。modeに許可される値はencrypt、encode、decrypt、decodeで、encodeはencryptに、decodeはdecryptにマッピングされます。textフィールドは16進数である必要があり(任意のスペース、コロン、ハイフン、0xプレフィックスは除去されます)、同じキーストリームが適用され、結果のバイトはUTF-8テキストとしてデコードされます。必須の文字列フィールドtextに平文メッセージまたは16進数暗号文、必須の文字列フィールドkeyに空でない任意のパスフレーズ、デフォルトがencryptの任意のmodeを含むJSONを送信してください。input、value、s、message、ciphertextはボディのエイリアスとして機能し、password、secret、k、passphraseはキーのエイリアス、op、action、directionはmodeのエイリアスです。成功時のレスポンスには、16進数または平文の文字列を持つresult、encryptまたはdecryptに正規化されたmode、キーのUTF-8バイト長に等しいkey_length、処理されたデータバイト数に等しいbytes、そしてクライアントが形を推測せずに分岐できるようxorに等しいmethodが含まれます。パスはネットワーク、乱数シード、時計を持たない純粋なバイト算術なので、同一の入力は常に同一のJSONを生成します。
検証ルール、空のキー、よくある落とし穴
textの欠落、文字列でないtext、空文字列はいずれもinvalid_inputを発生させ、エンジンがリクエストを拒否した後、プリペイドAPIでは課金されません。keyの欠落、文字列でないkey、空のキーもinvalid_inputで失敗します。decryptモードでは、区切り文字を除去した後の奇数長の16進数、16進数でない文字、または復号されたバイトが有効なUTF-8でない場合もinvalid_inputが発生し、クライアントが静かに破損した文字列を受け取ることがありません。
APIの使い方、料金、授業でのワークフロー、実用上の制限
バックエンド、サーバーレス関数、個別指導プラットフォーム、SDKが残高の下で安定した契約を必要とする場合は、成功した項目ごとに$0.002のプリペイドKIT APIをご利用ください。SDKを出荷する作者は、resultフィールドをコピーボタンに直接マッピングでき、mode、key_length、bytes、methodがOpenAPIの例を自己説明的にします。ペイロードはWorker isolateの項目呼び出しに適した通常のテキストサイズに保ってください。このツールはメッセージやスニペット向けであり、数メガバイトのバイナリブロブ向けではありません。
連携の活用例
授業でのストリーム暗号デモ
教師はXORがそれ自身の逆演算であることを示し、16進数の暗号文と平文を対比し、Helloとキーkeyを学生が手で再計算できる教科書のfixtureとして固定します。
パイプラインとCIのfixture
スクリプトと継続的インテグレーションのテストは、決定的なXOR 16進数出力と空キーエラーを固定し、キーストリームや16進数フォーマットの偶発的なバグを素早く失敗させます。
技術的な質問
XOR暗号でテキストを暗号化するには?
空でないtext、空でないkey文字列、任意のmode encrypt(デフォルト)を含むJSONを送信します。レスポンスのresultフィールドに小文字の16進数暗号文が入ります。