編碼(encoding)和加密(encryption)經常被混淆。認為只要數據被轉換成另一種看不懂的形式,那就是安全的。這種想法其實是對加密與編碼的誤解,本文將帶大家了解什麼是編碼、它的應用場景,以及為何編碼並不是加密。
編碼的目的是將數據從一種格式轉換成另一種格式,通常是為了讓數據在不同的系統或環境中能夠被正確傳輸或儲存。編碼不具備安全性,且解碼方式是公開的,任何人只要知道編碼規則,就能夠將編碼後的數據輕鬆解碼。
既然編碼不具備安全性,為什麼還要使用它?因為在數據傳輸和儲存中,某些系統無法處理非文本數據,編碼就成為一個重要的中介層。編碼能夠確保數據能夠跨越不同的系統與環境,而不會受到數據格式的限制。
舉例來說,當我們需要將二進制文件傳輸到僅支援文本的系統(例如電子郵件),我們可以先對數據進行 Base64 編碼。編碼後的數據可以在不同的系統中傳輸,最終在接收端解碼回原始數據。
以下舉例幾種編碼方式:
Base64 編碼
Base64 是將二進制數據轉換為 ASCII 字符串的一種編碼方式。這在需要將二進制數據傳遞給不支援二進制數據的系統時非常有用,如電子郵件的附件或 API 資料傳輸。
使用字符集:64 個可讀字符,包括字母大小寫(A-Z, a-z)、數字(0-9)、以及 + 和 / 符號。
將每 3 個字節(二進制數據)轉換成 4 個 ASCII 字符。 如果待編碼的數據不是 3 的倍數,Base64 會使用填充字符 =
來補足,確保編碼後的長度是 4 的倍數。
將文本 hello
進行 Base64 編碼,會得到 aGVsbG8=
的結果。
URL 編碼
在 URL 中傳遞非字母數字的字符時,這些特殊字符需要被編碼成安全的格式,透過將特殊字符轉換成 %
跟兩位十六進制數字。
安全處理網址中的參數時,空格在 URL 中會被編碼為 %20
或 +
,一些特殊字符如 &
、=
也會被編碼,防止特殊字符干擾 URL 的解析。
ASCII 編碼
最早的編碼方式之一,表示 128 個字符,包含大寫字母(A-Z)、小寫字母(a-z)、數字(0-9)、特殊符號和控制字符。
例如:
A 的 ASCII 編碼是 65。
a 的 ASCII 編碼是 97。
其餘詳見 ASCII
進入到我們今天的 LAB
Lab_1 - Nice netcat...
題目說到可以在 shell 上使用 nc mercury.picoctf.net 7449
這個指令,打開我們的 Linux terminal,輸入後的到一串數字如下112 105 99 111 67 84 70 123 103 48 48 100 95 107 49 116 116 121 33 95 110 49 99 51 95 107 49 116 116 121 33 95 102 50 100 55 99 97 102 97 125 10
看起來有點像 ASCII,於是我們使用 ASCII to Character 的工具。按下 Convert
後得到我們的 flag
Lab_2 - ReadMyCert
題目給了一個 CSR 檔案,打開後長這樣,我們需要想辦法還原 flag
先來 try try 看能不能用 Base64 解碼,一樣使用線上工具 base64 decode,flag 出來了。
今天的練習就到這邊,以下是參考資料,請搭配服用:
內文如有錯誤,還請不吝指教~