編碼格式識別

不確定一段字串是 Base64、十六進位、Base58 還是別的編碼?貼上到這裡,工具會嘗試所有解碼器,對能順利解碼的結果排序,並預覽解碼後的資料。

完全在瀏覽器中執行,不會上傳任何資料。

使用方法

  1. 把未知字串貼上到輸入框中。
  2. 工具會執行所有解碼器,列出能順利解碼的編碼,可能性最高的排在最前面。
  3. 檢視每個候選結果的解碼預覽(文字或位元組)以及識別出的檔案型別。
  4. 確定編碼後,開啟對應的工具頁面進行解碼、轉換或下載。

識別原理

每種編碼都有自己的規則,字串要麼符合,要麼不符合。工具會用每個解碼器嘗試解碼你的輸入:遇到字母表之外的字元、不可能出現的長度或位置錯誤的填充,就排除該編碼;剩下的再按解碼結果的合理程度排序。

  • 字元集。十六進位只用 0-9 和 a-f;Base58 不會出現 0、O、I、l;出現 + 或 / 多半是 Base64,出現 - 和 _ 則更像 Base64URL。
  • 長度和填充。十六進位必須是偶數位;Base64 以 4 個字元為一組,Base32 以 8 個字元為一組,填充符 = 只能出現在末尾。
  • 解碼結果是否可讀。能解碼成有效 UTF-8、並且由可列印字元組成的候選,遠比解出一堆隨機位元組的候選更可信。
  • 檔案簽名。如果解碼後的位元組以已知的檔案頭開頭,例如 PNG、JPEG、PDF、ZIP 或 gzip,工具會同時顯示檔案型別。

data: URI 字首、Adobe 的 <~ ~> 定界符、uuencode 的 begin 行等包裝格式,對應的解碼器都能識別。整個過程都在瀏覽器中完成。

為什麼結果是排序,而不是定論

不同編碼的字母表大量重疊。字串 48656c6c6f 是 Hello 的十六進位形式,但這 10 個字元同樣是合法的 Base64、Base36、Base58 和 Base62,只是解出的位元組各不相同。只有按十六進位解讀才能得到可讀文字,所以十六進位排在第一位。像 cafe 這樣的短單詞幾乎符合所有字母表,字串本身無法說明它原本用的是哪一種。

輸入越長,結論越清晰,因為偶然吻合的可能性會迅速降低。如果沒有任何候選能解碼成文字或已知檔案型別,資料可能經過加密或壓縮,也可能是雜湊值。例如十六進位形式的 SHA-256 雜湊完全是合法的十六進位,但它的位元組本來就設計成看似隨機。

常見編碼的肉眼識別方法

編碼典型特徵
十六進位只有 0-9 a-f,長度為偶數。32、40 或 64 位常見於 MD5、SHA-1、SHA-256 雜湊。
Base64A-Z a-z 0-9 + /,長度是 4 的倍數,末尾可能有 = 或 ==。
Base64URL用 - 和 _ 代替 + 和 /,通常不填充。用點號連線的三段內容是 JWT。
Base32大寫 A-Z 加 2-7,用 = 填充到 8 的倍數。
Base58字母和數字,但沒有 0 O I l。常見於比特幣地址和以 Qm 開頭的 IPFS 雜湊。
Ascii85、Base85字母、數字和標點符號密集混排。Ascii85 有時包在 <~ ~> 之間。

常見問題

怎樣判斷一段字串是不是 Base64?
看它是否只包含 A-Z、a-z、0-9、+ 和 /,長度是否為 4 的倍數,末尾是否最多有兩個等號。貼上到這裡,看看能否解碼成可讀文字或已知檔案型別。如果需要嚴格檢查並定位錯誤位置,請使用 Base64 校驗工具。
為什麼會顯示好幾種編碼?

很多字串同時符合多個字母表,短字串尤其如此。工具會列出所有能無錯誤解碼的編碼,並根據解碼結果是否為可讀文字、是否帶有檔案簽名,把最可能的排在前面。

所有結果都不是可讀文字,說明什麼?
資料可能是二進位內容,比如圖片或壓縮檔案,這時可以參考識別出的檔案型別。它也可能是加密資料、雜湊值,或者用非標準字母表編碼的位元組;後一種情況可以試試自定義字母表工具。
這個工具能解密字串或破解雜湊嗎?

不能。Base64 這類編碼不使用金鑰,本身就是可逆的,所以能被識別和解碼。加密資料沒有金鑰就無法讀取,雜湊值也無法還原成原始輸入。

貼上的字串會發送到伺服器嗎?

不會。所有解碼器都在瀏覽器本地執行,權杖、金鑰和日誌內容都不會離開你的裝置。