1. 程式人生 > >關於URL去重-MD5演算法步驟

關於URL去重-MD5演算法步驟

URL去重-MD5演算法學習筆記

URL去重-MD5演算法學習筆記

在網路爬蟲過程中,會爬取到很多相同的url,這個時候就需要我們去掉重複的URL。關於URL去重的演算法有很多,剛剛學習了MD5演算法。MD5演算法是基於Hash的演算法。所以首先說說Hash演算法。

Hash演算法

對於爬取下來的URL,可以基於Hash函式進行儲存,也就是一個URL 經過Hash函式,對映到散列表中的一個具體的物理位置上。每次只要計算剛剛爬取下來的URL是否已經存在,就可以了。這樣做,有兩個問題。

  1. 主要依賴於Hash函式。如果Hash函式設計的不好,在進行對映的時候,發生碰撞的機率很大,則再進行碰撞的處理也非常複雜。
  2. 未經處理的URL有可能佔用很大的儲存空間

MD5演算法

MD5演算法是一種加密演算法,同時它也是基於Hash的演算法。**首先對URL字串進行壓縮,得到一個壓縮字串,解決了URL 佔用很大儲存空間的問題。**同時可以直接得到一個Hash地址。MD5進行Hash對映碰撞的機率非常小。

MD5演算法的具體步驟

MD5演算法:以512位分組來處理輸入的資訊,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位雜湊值在這裡插入圖片描述

  1. 填充資料:首先需要對資訊進行填充,使其位元組長度對512求餘的結果等於448。因此,資訊的位元組長度(bits length)將被擴充套件至n512+448(位),即n
    64+56個位元組(bytes)。<一個位元組==8位>。填充時,緊挨著資料補1,其餘往後都補0。
  2. 新增資料長度:在填充的資訊後面加上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))