前言
爬蟲盛行的年代,防爬蟲的技術也隨之而起,其中一種技術是將電子郵件編碼,藉由網頁載入 js
後還原回正常的電子郵件格式。但是這種防禦手法效用可以說是微乎其微,甚至還要多花時間去解碼,可以說是得不償失。
沒有效用的原因有很多,主要是因為這不是加密解密問題,單純只是編碼與解碼,所以非常容易破解。再者,可以使用 selenium
等網頁載入好再進行爬蟲的動作。
雖然如此,現在遇到這項技術還是要研究一下其原理,為了以後遇到其他問題時可以有不一樣的思路。
問題解析
在爬蟲時遇到電子郵件的地方有可能會顯示被加密的狀態,例如
1 | <span class="__cf_email__" data-cfemail="f2f0ded3dcd1dad7c6c6f2">[email protected]</span> |
真正的電子郵件被編碼變成 data-cfemail
屬性的數值,這長長一串都是 16 進位的表示,且分為兩個部分
- 密鑰:前兩碼為密鑰的 16 進位表示法。
- 信箱本體:除了密鑰,都為信箱本體,每兩個字元分為一組。
採取最簡單的異或 (xor
) 編碼方法,也就是密鑰與信箱本體依序的去做 xor
運算,所得結果即為編碼後的結果。
解決方法
知道規則後,接下來只要解碼就可以了。若要解碼,對編碼後的數值多 xor
一次,就能得到原本的信箱字串
1 | codedMail = '4D08202C242108232E222924232A0d39283E39632E222063393A' |