檔案系統:介面
魔術數字(magic number)
想像每一個牌子的罐頭食品都在蓋子內側蓋上同一個秘密符號,這樣工廠機器人不必讀標籤就能分辨番茄湯和水蜜桃。魔術數字就是檔案版的那個印記:一段短而固定的位元組樣式,放在已知的位置(幾乎總是檔案的最開頭),可靠地標明這個檔案的格式。
當程式需要知道一個檔案到底是什麼時,它會開啟檔案、讀進開頭那幾個位元組,再拿去和一張已知簽章的對照表比對。PNG 影像總是以位元組 137 80 78 71 開頭(其中第一個是近乎看不見的位元組,後面拼出 PNG);PDF 檔以字元 %PDF 開頭;Java 類別檔以那個用十六進位寫成 CAFEBABE 的著名值開頭;Unix 指令稿可以用開頭兩個字元(一個井字號加一個驚嘆號,稱為 shebang)來宣告它的直譯器。由於這些位元組就在資料本身裡面,它們能在改名、複製、寄信之後依然存在。作業系統或函式庫比對到樣式後便能斷定,例如:「這是 PNG,交給影像解碼器吧。」
為什麼重要:魔術數字是那個容易造假的副檔名的可信對照物。像 Unix 的 file 指令這類工具,幾乎完全是靠魔術數字來辨認檔案類型。誠實的提醒是:魔術數字只能證明檔案「開頭看起來像」某種格式;一個損毀或被惡意製作的檔案可以帶著看似合法的簽章,卻仍然是壞的或危險的,所以魔術數字是意圖的有力證據,而不是安全的保證。
傾印一個 PNG 的前八個位元組會看到:137 80 78 71 13 10 26 10。開頭的 137 80 78 71 就是那個說「我是 PNG」的魔術數字,不管這個檔案叫什麼名字。
資料開頭一段固定的簽章,不受改名影響。
魔術數字證明檔案「開頭像」某格式;它不是有效性或安全性的證明。一個被截斷或具敵意的檔案,仍可能帶著看起來正確的簽章。
又稱
另見