关于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(位),即n64+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))

猜你喜欢

转载自blog.csdn.net/weixin_44037773/article/details/85037117
今日推荐