關於URL去重-MD5演算法步驟
URL去重-MD5演算法學習筆記
URL去重-MD5演算法學習筆記
在網路爬蟲過程中,會爬取到很多相同的url,這個時候就需要我們去掉重複的URL。關於URL去重的演算法有很多,剛剛學習了MD5演算法。MD5演算法是基於Hash的演算法。所以首先說說Hash演算法。
Hash演算法
對於爬取下來的URL,可以基於Hash函式進行儲存,也就是一個URL 經過Hash函式,對映到散列表中的一個具體的物理位置上。每次只要計算剛剛爬取下來的URL是否已經存在,就可以了。這樣做,有兩個問題。
- 主要依賴於Hash函式。如果Hash函式設計的不好,在進行對映的時候,發生碰撞的機率很大,則再進行碰撞的處理也非常複雜。
- 未經處理的URL有可能佔用很大的儲存空間
MD5演算法
MD5演算法是一種加密演算法,同時它也是基於Hash的演算法。**首先對URL字串進行壓縮,得到一個壓縮字串,解決了URL 佔用很大儲存空間的問題。**同時可以直接得到一個Hash地址。MD5進行Hash對映碰撞的機率非常小。
MD5演算法的具體步驟
MD5演算法:以512位分組來處理輸入的資訊,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位雜湊值
- 填充資料:首先需要對資訊進行填充,使其位元組長度對512求餘的結果等於448。因此,資訊的位元組長度(bits length)將被擴充套件至n512+448(位),即n
- 新增資料長度:在填充的資訊後面加上64位的資料,(也就是8位元組)。
<經過以上兩步,現有的資料長度是n*64+56+8個位元組==(n+1)*64位元組> 恰好是64個位元組的整數倍。這樣做的原因是為滿足後面處理中對資訊長度的要求
3. 初始化引數:MD5中有4個4位元組(32位)的整數引數,也就是連結變數。
a=0x01234567,b=0x89abcdef,c=0xfedcba98,d=0x76543210
4. 進行迴圈運算+設定非線性函式:主迴圈有四輪。第一輪進行16次操作。每次操作對a、b、c和d中的其中三個作一次非線性函式運算,然後將所得結果加上第四個變數,文字的一個子分組和一個常數。再將所得結果向右環移一個不定的數,並加上a、b、c或d中之一。最後用該結果取代a、b、c或d中之一。
以一下是每次操作中用到的四個非線性函式(每輪一個)。
f(x,y,z) =(x&y)|((~x)&z)
g(x,y,z) =(x&z)|(y&(~z))
h(x,y,z) =xyz
i(x,y,z)=y^(x|(~z))