Hashing 是雜湊
是電腦科學中一種對資料的處理方法,通過某種特定的函式 / 演算法
將要檢索的項目與用來檢索的索引關聯起來,生成一種便於搜尋的資料結構
這一段參考至 wiki,因為我覺得 wiki 的資料比我心中的草稿更嚴謹
對寫程式的人來說,你可能知道一種資料結構叫雜湊表
舉例來說,我現在定義 1 對應到 "Hello",2 對應到 "World",3 對應到 "Python"
我們就可以得到這樣的關係 :
1 -> "Hello" ,
2 -> "World" ,
3 -> "Python" ,
一個 Key 對應一個 Value 的關係,對於搜尋會非常方便
但如果今天 1 同時對應到 "Hello" 和 "World",這樣的關係稱作「碰撞」
所以我們在設計雜湊表時應該盡可能去避免這種事情發生
喔不 ! 當我沒說 ! 其實大部分時候我們也不會自己設計雜湊表
說那麼多,雜湊對於爬蟲有什麼理解上的必要嗎 ? 寫爬蟲也要會雜湊嗎 ?
其實今天要介紹的是一個常見的雜湊演算法,它叫做 MD5
給大家猜猜看 d41d8cd98f00b204e9800998ecf8427e 的 Input 是什麼 ?
之所以學爬蟲還要知道 MD5,是因為我爬過某些網站
網站中的 POST 表單夾帶像上面那樣類似亂碼的資料
而且我怎麼找都找不到 d41d8cd98f00b204e9800998ecf8427e 這樣子的字串
但是這一定是本地端計算好的資料才會被 POST 啊 !
最後終於在不知道什麼樣的機緣下,我才知道原來這是經由叫做 MD5 的演算法計算而來
對了,d41d8cd98f00b204e9800998ecf8427e 這串鬼東西是空字串的 Output 喔
這是之前在模擬麥當勞報報登入時的其中一小段程式碼
在撈封包的過程中也是看到長度 32 個字元的亂碼,由英文數字組成
夾帶在表單中,名為 mask 的參數,當時我真的百思不得其解
後來是透過反編譯的方式查到那段原始碼,才知道是一個叫做 MD5 的演算法
並且 Input 如圖所示,寫了一大坨程式碼只為了準備一個 POST 表單資料
MD5 可以產生出一個 128 位元的雜湊值,一般來說都會被表示為 32 位元十六進位數字
不過只是一般來說而已,MD5 也可以被表示成 16 位元長度,但我目前見到都是 32 位元
總之下次在處理 POST 表單時,如果有看見這樣格式的字串,就可以聯想到 MD5
或者你在撈封包的過程中就發現 md5.js 也是有可能的
總之,知道一下就好