重複金鑰 XOR 作用於 UTF-8 位元組是一種確定性的轉換:每個明文字元都會與對應的金鑰位元組透過 XOR 結合,當輸入長度超過金鑰時,金鑰會從頭循環,最終產生的位元組序列可以表示為小寫十六進位或標準帶填補的 Base64。所謂的 XOR 加密線上 API 替代工具,是指在不連線任何遠端端點的情況下執行相同轉換的工具,而 XOR Encryption Online 頁面正是如此 —— 整個轉換完全在瀏覽器中執行,明文與金鑰都透過同一個以 TextEncoder 為基礎的 UTF-8 管線進行編碼,頁面絕不會將訊息、金鑰或輸出上傳至伺服器。這使得該頁面在腳本、測試與教學文件等需要交換可還原的混淆訊息、而非整合付費服務的場景中,成為 API 呼叫的直接替代方案。只要兩位使用者對金鑰文字完全達成共識 —— 包含大小寫、空格與位元組層級的解讀方式 —— 無論是誰加密、也不論在頁面上走的是哪個方向,最終都會重現出相同的密文字元。

「無 API」對 XOR 加密的意義
當有人在搜尋 XOR 加密線上 API 替代方案時,通常希望一次同時達到三個目的:跳過註冊流程、跳過網路往返,同時仍能取得自己動手寫也會得到的相同重複金鑰 XOR 轉換。XOR Encryption Online 頁面正好滿足這三點。這個轉換非常精簡,足以內嵌於任何語言中,這正是為什麼多數「XOR 加密 API」服務其實都只是把同樣幾行程式碼包裝起來。把這些程式碼包進一個遠端端點,只會增加延遲、擴大攻擊面,並引發隱私疑慮;而基於瀏覽器的替代方案則一次消除了這三個問題。
延遲從網路往返時間,縮減為把文字複製進文字區的時間。認證攻擊面消失了,因為沒有權杖、不需註冊,也沒有任何以使用者為單位的狀態。隱私疑慮也不復存在,因為頁面不會上傳訊息、金鑰或輸出。明文、金鑰與密文都是以純文字的方式複製進出頁面,這使得與命令列工具、Python 等語言的腳本、或自行撰寫的 XOR 常式比對輸出變得輕而易舉。慣例本身非常明確:明文與金鑰皆以 UTF-8 編碼,每個明文字元都會與對應的金鑰位元組進行 XOR(當訊息長度超過金鑰時,會從金鑰的開頭循環),接著把產生的位元組序列序列化為小寫十六進位與標準帶填補的 Base64。只要兩位使用者遵循相同慣例並使用相同金鑰,就一定會得到相同的密文字元。
為何瀏覽器工具可以取代 API 端點
決策通常歸結於 API 端點究竟能為你帶來什麼。對於需要維護共享狀態的集中式服務 ——例如使用者資料庫、計費帳本、託管金鑰保存庫 —— 網路往返才是整個機制的核心。重複金鑰 XOR 卻完全沒有這些需求。這個轉換完全由輸入內容與慣例所決定,因此 API 能做到的只剩下託管實作、額外的便利功能與計費介面。對互通性檢查、搶旗賽練習及臨時性的混淆任務而言,唯一重要的就是託管實作,而這個部分一個文字區就能裝得下。
對於可攜性的 UTF-8 文字而言,這點更為重要。當輸入包含表情符號、變音符號或非拉丁字母時,每個可見字元會佔據好幾個 UTF-8 位元組,而每個位元組都會消耗重複金鑰中的一個位置。遠端 API 可以把這個細節藏在預設編碼後面;本地工具則讓它一目了然。XOR Encryption Online 的實作會透過瀏覽器的 TextEncoder 將明文與金鑰進行編碼,接著對位元組陣列進行 XOR,最後以嚴格的 UTF-8 驗證解碼還原出來的位元組。在寬鬆解碼器中可能產生亂碼的錯誤金鑰,在此會直接顯示為明確的驗證錯誤,這比遠端 API 回應「ok」卻回傳亂碼的除錯信號更快。想要親自驗證此慣例的讀者,可以將頁面的行為與 MDN 上關於 TextEncoder 與位元 XOR 的說明文件進行比對。
下表整理了在「API 替代方案」使用情境中,遠端 XOR API 與本地瀏覽器頁面在各項關鍵屬性上的差異。
| 屬性 | 遠端 XOR API | XOR Encryption Online(瀏覽器) |
|---|---|---|
| 是否需要認證 | API 金鑰或權杖,通常還須註冊 | 無 —— 無帳號、無金鑰、無須註冊 |
| 每次轉換是否需進行網路呼叫 | 是,每次請求皆須一傳回的 HTTP 往返 | 否 —— 於當前分頁中執行 |
| 金鑰解讀方式 | 通常可設定(十六進位、UTF-8、Base64) | 一律視為 UTF-8 文字 |
| 是否上傳訊息與金鑰 | 是 —— 會傳送至伺服器 | 否 —— 絕不離開裝置 |
| 輸出表示方式 | 每次請求通常僅提供一種 | 小寫十六進位與 Base64 並列顯示 |
| 錯誤金鑰的回饋方式 | 視 API 而定;可能回傳 200 但夾帶垃圾資料 | 嚴格的 UTF-8 驗證會將多數錯誤金鑰顯示為可見錯誤 |
| 速率限制或配額 | 通常有 | 無 —— 僅有 100,000 位元組的輸入上限 |
在瀏覽器中執行重複金鑰 XOR 轉換
下列三步驟工作流程涵蓋了常見情境:一方加密訊息,另一方僅透過頁面與複製貼上的方式進行解密。這些步驟假設你已開啟 XOR Encryption Online 頁面,且雙方已對金鑰文字(包含大小寫與任何空格)達成完全共識。
- 選擇加密方向,將 UTF-8 明文貼入輸入區,並在金鑰欄位中輸入完全相同的重複金鑰。由於金鑰會被視為文字,因此字面字元「key」會被視為三個 UTF-8 位元組 6B 65 79,而非另一個將金鑰解讀為十六進位的工具可能使用的位元組序列 0x6B6579。
- 執行本地 XOR 轉換。頁面會將每個明文字元與對應的金鑰位元組透過 XOR 結合,當訊息長度超過金鑰時,金鑰會從頭循環。接著同樣的密文字元會以兩種形式顯示:一次為連續的小寫十六進位字串,一次為標準帶填補的 Base64。請依接收端系統所要求的表示形式複製,並告知對方你選擇了哪一種。
- 若要解密,接收端需選擇解密方向,挑選對應的表示形式(十六進位或 Base64),貼上密文,並輸入一模一樣的金鑰文字。順利完成的話,將還原為原始的 UTF-8 明文。若頁面回報 UTF-8 驗證錯誤,請比對金鑰的精確字元,並確認傳輸過程未對密文進行裁切或修改。
此慣例刻意設計得明確,因為雙方必須遵循完全相同的位元組編碼與金鑰循環規則,才能產生一致的結果。將金鑰視為文字而非十六進位,是跨工具不一致最常見的原因;將 UTF-8 字元視為多位元組序列,則是長度混淆最常見的原因。把這兩點都做好,就是認證認證的全部工作。
以十六進位或 Base64 形式交換密文
十六進位與 Base64 只是同一組 XOR 密文字元的不同表示方式,而非不同的密文。切換輸出格式並不會改變頁面所產生的位元組。十六進位為每個位元組寫出兩個十六進位數字,方便檢視;而 Base64 長度較短,更易於在文字欄位、電子郵件內文或 JSON 字串中傳遞。XOR Encryption Online 頁面同時顯示這兩種形式,因此傳送方可直接挑選任一種接收端所表示的格式,而無需重新加密。
解密時,接收端必須選擇對應的表示形式。十六進位模式要求完整的辨位元組對,且僅接受十六進位字元;不過為了方便換行,系統會略過空白字元。Base64 模式則要求使用標準字母表且填補正確。解析後的位元組會再以 UTF-8 金鑰進行 XOR,並透過嚴格的 UTF-8 驗證進行解碼,這表示格式錯誤的位元組會顯示為明確的錯誤,而不會以無聲的替代字元呈現。然而,即使 UTF-8 解碼成功,也並不代表金鑰一定正確:某些錯誤的位元組序列仍可能剛好組成有效字元,特別是在簡短的 ASCII 訊息中。請透過獨立管道確認訊息內容有意義,再將任何解碼後的文字視為真實內容。
將瀏覽器輸出與命令驗證對照
凡是會以本地工具取代 API 呼叫的使用者,都應該能以自己慣用的語言,用幾行程式碼重現出完全相同的位元組。XOR 加密線上 API 替代方案的重點在於,這個數學運算簡短到可以針對輸入圖片手動驗證。以單一位元組進行一次最簡的演練,便能讓此慣例更具體。
取明文字元 0x41(ASCII 字母「A」)與金鑰位元組 0x4B(ASCII 字母「K」)。XOR 運算結果為:
- 0x41 XOR 0x4B = 0x0A
- 二進制表示:01000001 XOR 01001011 = 00001010
- 十六進位表示:0a
- Base64 表示:Cg==(以標準填補編碼的單一位元組)
若在較長的明文中重複使用該位元組,便會產生一系列單一位元組的 XOR 結果;同一規則亦可一般化:每個輸出位元組皆為明文一個位元組與金鑰一個位元組的 XOR,當金鑰長度短於訊息時,金鑰會從頭循環。將相同輸入透過 XOR Encryption Online 執行,理應產生相同的十六進位與 Base64 字串,這正是與任何 API 包裝或自寫腳本進行比對的最簡單方式。若出現輸出位元組不一致的情況,首先應比對的是金鑰究竟是以 UTF-8 文字還是以十六進位字串方式處理 —— 此頁面一律以 UTF-8 文字為準。
Limits, Conventions, and What the Tool Will Not Do
The page enforces a small set of limits so the conversion stays responsive. Input and key data are capped at 100,000 bytes each, and an empty input or empty key is rejected. Whitespace inside plaintext is significant, while whitespace inside the encoded ciphertext is ignored for convenient line wrapping — no other cleanup or guessing is performed. Unicode text can occupy several bytes per visible character, so emoji and many non-Latin scripts consume multiple key positions. The implementation XORs bytes, not JavaScript UTF-16 code units and not user-perceived grapheme clusters, which keeps mixed-language results reproducible across standards-compliant browsers.
The most important "limit" is the absence of cryptographic guarantees. The page has no checksum, no authentication tag, no salt, no nonce, no password stretching, and no key-management system. Repeating-key XOR is reversible obfuscation, not modern encryption: repetition exposes patterns, known plaintext can reveal key bytes, short keys are especially weak, and attackers can alter ciphertext without detection. Do not use this page to protect passwords, personal records, payment details, private keys, or any information where confidentiality or integrity matters. Use a reviewed authenticated-encryption system for those tasks — for example, an AES-GCM JSON package workflow is a closer fit when real protection is the goal. For harmless puzzles, interoperability checks, and capture-the-flag exercises, the XOR Encryption Online page is a fast, deterministic, API-free option.
Related reading: AES Encryption Online: Encrypted Text as a JSON Package.
Related reading: BCC Checksum Explained: How XOR-8 Works and What It Misses.