Ciphey 自動解密工具實測:多層密文秒解,發布版地雷先看清

Ciphey 是貼上亂碼就自動解出明文的開源命令列工具。實測 v0.12.1 發布版:四層 Base64 疊加 0.09 秒解開,但它說明文件裡的第二個範例解不出正確答案,教科書級的 Vigenère 密文更讓程式直接崩潰,修復都還在尚未發布的 master 分支上。該裝哪個版本、能解什麼、邊界在哪,一篇看清。

用 AI 摘要這篇文章:

我把七種輸入丟給 Ciphey 的最新發布版:單層與四層 Base64、十六進位、crib 案例全部正確解開;它說明文件裡的第二個範例測了三次全部失敗,一次崩潰、兩次吐出控制字元垃圾答案;Vigenère 教科書範例與隨機亂數則是每次都讓程式直接崩潰退出。工具的核心能力沒有問題,卡住它的是版本節奏:發布版落在修復潮之前,你裝到哪一層版本,決定你拿到的是順手工具還是連環崩潰。

先把工具講清楚。Ciphey 是一套開源命令列工具,解決的問題只有一個:你手上有一段看不懂的文字,不知道它是 Base64、十六進位、凱薩位移還是哪種編碼疊出來的,貼給它,它自己試、自己解、解到出現看起來像人話的明文為止。整個過程不需要你提供金鑰,也不需要你先判斷編碼方式。對寫 CTF 題目的人、整理別人留下的資料的人、單純好奇一串亂碼是什麼的人,這個流程省掉的時間很可觀。

實測環境講在前面:官方 GitHub 發布頁的 v0.12.1 預編譯版,macOS Apple silicon 機器,SHA256 校驗通過後直接執行,所有數字與行為都出自這個版本。

斷更將近四年之後,用 Rust 重寫回來

Ciphey 的資歷比多數人想像的老。原作者 Autumn Skerritt 在個人部落格提過,這個專案最早在 2008 年動工,當時他還是個不太會寫 Python 的學生,全部程式塞在一個檔案裡,檢查明文靠一份陽春的英文字典,也沒有開源。2019 年他利用一個暑假把它重寫成開源專案上 GitHub,這才長出多層解碼與搜尋演算法,2021 年 6 月推出 Python 版的最後一個正式版 5.14.0,然後專案沉寂。

故事沒停在這裡。2022 年 12 月他發文宣告另起爐灶,用 Rust 重寫整個搜尋核心,新專案叫 Ares。他在文章裡對 Python 版的檢討很直白:核心裡一段丟不掉也沒人能升級的 C++ 程式碼、難以追蹤的邏輯臭蟲、少得可憐的測試與文件,加上 Python 吃不到多核心,最後他直接宣布舊版死亡。Rust 版先以 Ares 之名開發,後來以 Ciphey 之名重新出發,2025 年 3 月第一次登上 crates.io,2026 年進入密集整修期。今天倉庫上的成績單:兩萬一千七百多顆星、MIT 授權、開放議題六十多個、最後一次推送在十月中,是活的專案。

速度是這次重寫的主打。說明文件上的比較表宣稱,同樣的輸入 Rust 版比 Python 5.14.0 快 1.9 到 8.6 倍,有兩個多層案例 Python 版跑滿 60 秒仍無答案。這是作者自己量的數字,測試腳本與每次跑分的原始紀錄都放在倉庫的媒體分支上,量測對象是開發中的版本而非發布版,這個細節後面會變得很重要。

Ciphey 官方 README 的速度比較圖,顯示多種輸入下 Rust 版與 Python 5.14.0 的解碼秒數對比,Rust 版全部落在 0.11 到 1.15 秒之間Pin
官方速度比較圖:作者宣稱 Rust 版對 Python 5.14.0 快 1.9 到 8.6 倍,兩個多層案例 Python 版 60 秒無解(圖片來自 Ciphey 官方 README)。

第一次執行:設定精靈與那個 500MB 的選項

下載解壓後第一次執行,程式會先跑一輪互動式設定:要不要看教學、要不要自訂配色、找到明文時要逐次確認還是收集到最後一次列出、搜尋時間上限設幾秒、要不要掛自訂詞表,最後還會問你想不想看一隻貓。問答都結束後設定存進 ~/.ciphey/config.toml,之後不再問。

設定流程裡有一個值得停下來看的選項,叫增強明文偵測。畫面上的說明寫著:準確率提升約四成、需要下載約 500MB 的 AI 模型、你要先註冊 Hugging Face 帳號並建立讀取權杖。這是作者宣稱的數字與設計,我沒有實際下載模型驗證成效,但光就選項本身,意思是預設安裝不會碰這個模型,想開啟的人要有帳號與下載成本的心理準備。對 CTF 選手來說多一個可能提高命中率的籌碼,對只想偶爾解個編碼的人,按掉就好。

另外提一個小發現:這支程式沒有 –version 參數,打了會提示你是不是想用 –verbose。想確認版本的人得靠下載來源自己記。

四層 Base64 疊起來,0.09 秒剝完

實測的第一組是說明文件首頁的示範案例:把一句英文用 Base64 編碼四次再餵進去。命令列下 time 指令,結果 0.09 秒完成,輸出明文之餘還印出它走的路徑,Base64 接 Base64 接 Base64 再接 Base64,四層一路剝到底。說明文件的比較表給四層 Base64 的數字是 0.41 秒,不過那是作者在共用 16 核 Linux 機上量開發中版本的中位數,我在 Apple silicon 上量發布版的單次成績,環境與版本都不同,只能當量級參考,但同樣是壓在半秒內。

Ciphey 終端機示範畫面,四層 Base64 編碼的文字被自動解開,輸出顯示解碼路徑 Base64 連續四層與最終明文Pin
官方示範畫面:四層 Base64 自動剝開並印出完整解碼路徑(圖片來自 Ciphey 官方 README)。

單層的表現同樣乾淨。一段標準 Base64 字串餵進去,直接吐出明文與使用的解碼器;一段十六進位字串解開後,它不只給你 192.168.0.1 這個答案,還標注這是 IPv4 位址。這背後是它整合的格式辨識器 LemmeKnow,官方宣稱能認出一百二十多種格式:密碼出現在 mount 指令裡、TOTP 動態密碼的 URI、GitHub 權杖、Stripe 金鑰、IP 與 MAC 位址、錢包位址、CTF 旗標格式。解碼與辨識一起做,對 CTF 玩家是雙重價值。

Ciphey 終端機畫面,十六進位字串 3139322e3136382e302e31 解開為 192.168.0.1 並被標注辨識為 IPv4 位址Pin
十六進位解開成 192.168.0.1 後,LemmeKnow 格式辨識器標注這是 IPv4 位址(圖片來自 Ciphey 官方 README,與本文實測結果一致)。

還有一個日常使用會感謝的設計:答案快取。解過的輸入會存進 ~/.ciphey/database.sqlite,官方說同一段文字第二次丟進來會在毫秒級回覆,我重跑解過的案例也確實是秒回。快取出錯的方式是記住錯誤答案,說明文件給的解法是刪掉那個檔案重來。

說明文件自己的範例,發布版解不出來

實測到說明文件快速上手的第二個範例時,事情變了。這個範例是一段字串,官方說它是 ROT13 套 hex 再套 Base64 的三層結構,照文件說法貼進去就會解開。我用 Python 手動解一次作為對照組:Base64 解開得到一串十六進位,十六進位解開得到看似亂碼的英文,再做 ROT13 位移,答案是 Ciphey is very fast。

發布版的實際表現我重複測了三次,包括把搜尋上限從預設 5 秒拉長到 15 秒。三次都沒有解出正確答案。一次直接崩潰退出,另外兩次給出一個只含單一位元組控制字元的答案,而且路徑顯示它走了一條不合理的鏈:atbash、十六進位、Base91,然後兩層替換密碼,最後停在沒有人讀得懂的垃圾上。同一個輸入,開發中版本宣稱 0.19 秒解開,發布版連自己文件裡的範例都過不了。

單一 bug 可以等修復,真正的麻煩在行為不可預期。同一段輸入,兩次執行一個崩潰、一個回垃圾答案,對需要把工具放進腳本裡的人,這種不穩定比慢更頭痛。

教科書裡的 Vigenère 範例,每次都讓它崩潰

第二組失敗更經典。Vigenère 加密的教科書標準例子,明文 ATTACKATDAWN 配金鑰 LEMON,密文 LXFOPVEFRNHR,出現在幾乎每一篇教這個密碼的文章裡。這段密文餵給發布版,兩次測試兩次崩潰,程式直接中止,離開碼 134,問題出在 Vigenère 解碼器的陣列索引越界。

而 Vigenère 就列在說明文件的支援清單上,文件還特別強調它會自己把金鑰推出來。發布版對這個正式宣稱支援的項目,實際上處於壞掉的狀態。再補一刀:餵一段純隨機的亂數字串,預期行為是跑完搜尋上限然後告訴你找不到,實際結果同樣是崩潰退出,連優雅的失敗都做不到。

發布版落後修復潮兩個月,坑在版本選擇

查原始碼倉庫的提交紀錄,這些問題全部有下文。10 月 1 日那一天連著進了三個修復:跳過非 ASCII 字元避免 Vigenère 越界、修正 A* 搜尋的節點擴展與結果檢查、以及一輪整體稽查修掉連續當機與錯誤答案。10 月 5 日再加上把 149 條真實 CTF 題目的字串丟進完整搜尋的回歸測試。我在發布版上重現的每種死法,都有主題對得上的修復已經進入開發線,修復後的成效我沒有編譯複測,但方向明確。

問題在版本節奏。目前看得見的 Ciphey 有四個時間層:

安裝來源版本時間點狀態
PyPI(Python 舊版)5.14.02021 年 6 月Python 版終點,實質凍結
crates.io0.12.02025 年 3 月比發布版再舊一年半
GitHub 發布頁v0.12.12026 年 8 月 31 日實測撞到崩潰的版本
原始碼 master開發版持續推送修復都在這層

(各安裝來源版本時間點,2026 年 10 月查核)

最坑的是 cargo install ciphey 這條說明文件第一行推薦的安裝路徑:它從 crates.io 拿 0.12.0,比 GitHub 發布頁的 0.12.1 還舊一年半。想避開地雷,抓 GitHub 發布頁的預編譯檔(四種平台各有附 SHA256 校驗檔)是發布版裡最新的;願意裝 Rust 工具鏈的人,直接從原始碼倉庫編譯 master,才能拿到 10 月的修復。

master 與發布版的差距還有一個明顯指標:說明文件的解碼器表列了 24 種,但 master 的註冊表裡已經排進 81 個,10 月 1 日開立的追蹤議題也自己寫著當時註冊 24 個、還有 109 個排隊等著做。Playfair、Hill、JWT、Gzip 這些都已經在 master 的註冊表裡。發布版的 24 個只是它能做的事情的底線,master 上還有三倍以上在路上。

能解的東西比你想的多,邊界也要看清

解碼器清單展開來看,涵蓋四個家族。各種 Base 編碼從常見的 Base64、Base32 到比特幣用的 Base58、冷門的 Base91 與 Base65536;古典密碼有凱薩與 ROT13、ROT47、Atbash、Vigenère、柵欄密碼與反轉文字;其他編碼包含摩斯電碼、點字、二進位、十六進位、URL 編碼;再加上會真的把程式跑完的 Brainfuck 直譯器這類怪東西。master 上陸續加入的還有 JWT、Gzip、Bzip2 這類結構化格式。

但有兩條邊界要先畫出來。一條是範圍:它處理的是編碼與古典密碼,清單裡沒有 AES、RSA 這類現代加密,也沒有雜湊破解;想查一個雜湊值對應到的檔案是不是已知惡意程式,那是 VirusTotal 這類線上掃描服務 的工作。沒有金鑰就解開現代加密在數學上不成立,工具也沒有假裝自己能。另一條是判定:明文判定不完美,這是作者自己在議題 #1031 承認的,極短的字、非英文的內容、JSON、特殊格式的旗標,都可能漏判或誤判,我在發布版上撞到的垃圾答案應該就與這套判定機制有關。

知道答案的片段時,有一個能繞過判定問題的參數:crib 模式。我用一段 Base64 包著的 picoCTF 旗標實測,帶上 -r 參數指定答案開頭要符合 picoCTF{ 的格式,解碼直接命中;不帶 crib 同一段也解得開,但遇上更刁鑽的格式時,先給它格式提示會是實用的做法。另外可以掛自訂詞表,候選明文逐字命中詞表裡的行就算數。

讓 Claude Desktop 幫你解:MCP 伺服器

Ciphey 也趕上了 MCP 潮。原始碼附了一個 ciphey-mcp 伺服器,編譯時加上 mcp 功能旗標就會生得出來,設定進 Claude Desktop 或 Kiro 這類支援 MCP 的助理後,助理能直接呼叫它解碼。官方說明列了四個工具:全自動解碼、指定解碼器、判定字串是不是明文、列出全部解碼器。伺服器端有明確的防護欄:單次輸入上限 65,536 字元、解碼最多跑 30 秒、記憶體上限 1GB、同時最多兩個解碼任務。

這段是照官方文件轉述,我這次沒有實際編譯與串接測試。想在助理裡用的人要注意安裝方式:mcp 功能還沒進 crates.io 發布版,文件明講要用 git 來源編譯,又回到同一個主題,最新的一切都在原始碼倉庫那層。對 MCP 生態有興趣的讀者,Krea 接上 Grok 機器人的 MCP 整合案例可以對照著看。

授權、費用與誰該裝

授權一條線講完:MIT,商用、修改、再散布都沒問題,21.7k 顆星的社群與活躍的提交紀錄背書它的維護狀態。費用是零,沒有付費版,沒有雲端方案。隱私面我看了核心的依賴清單,沒有任何網路函式庫,解碼本身不需要連網;想開 500MB 增強模型,才需要連 Hugging Face 下載,而且由你主動觸發。

不想安裝的人有一條零門檻的路:官方 Discord 的機器人頻道裡打 $ciphey 加上你的字串就會得到結果,這對只想偶爾用一次的人最划算。

誰該裝?寫 CTF 的人幾乎是必裝等級,多層編碼的題目它比手動逐層試快太多,crib 模式配旗標格式在實戰中最能派上用場。工程師、資安初學者、做數位鑑識練習的學生,工作上有時會收到來路不明的編碼字串,這套工具把逐種盲試的流程縮成一個指令。相對地,別期待它解開現代加密,也別拿它處理別人加密保護的資料:前者它做不到,後者你不該做。它處理的是教科書時代的密碼學與包裝資料的編碼,破保護本來就不在它的能力清單裡。同為 GitHub 上的開源命令列工具,MediaCrawler 那篇談過的授權與商用邊界在這裡反而是最簡單的一種,MIT 就是全部的答案。

該裝哪一版

我的建議取決於你對它的期待。要現在就用、要放進腳本,抓 GitHub 發布頁最新的預編譯檔,但心裡有底:Vigenère 相關輸入與部分多層案例會崩潰,等下一個發布版補上 10 月的修復。想用到 10 月那批修復與 81 個解碼器,裝 Rust 工具鏈從 master 編譯,或者先在 Discord 的機器人頻道裡用。這個專案值得觀察的點也已經很清楚:修復能量充足、擴充清單排到 109 項,卡住的只有從 master 到發布版之間那一哩路。

Sliven 褚崇名
Sliven 褚崇名

每日分享科技新知、免費資源以及 WordPress、虛擬主機相關主題,任何問題歡迎在科技月球下方留言,或是發送 Email 至 [email protected] 與我聯繫。

文章: 2104

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


Share to...