最近看了RabinHash相关的资料,写了写相关的一点程序。下面比较一下RabinHash和SHA1。
RabinHash
冲突率很小。它是将等计算文本看成由01串组成的一个很大的数或是多项式,对一个不可约的多项式取模得到结果。计算时间为线性时间,实现时可以仅用移位和异或,计算速度较快。对于固定长度的哈希,如果已知当前位置哈希值,则可以在常数时间内计算出向后移动一个单位的哈希值。这个性质可以用在文本匹配上,时间复杂度为O(n)。具体实现时,可以以字节或字为单位,提前打表记录移位,进一步提高速度。
SHA1
SHA1的全称是Secure Hash Algorithm(安全哈希算法)。加密哈希函数将任意长度的二进制字符串映射为固定长度的小型二进制字符串。加密哈希函数有这样一个属性:在计算上不大可能找到散列为相同的值的两个不同的输入;也就是说,两组数据的哈希值仅在对应的数据也匹配时才会匹配。数据的少量更改会在哈希值中产生不可预知的大量更改。所以你很难从加密后的文字中找到蛛丝马迹。常用于数字签名。生成的哈希为160位,是一种不可逆的算法。计算过程有补位、补长度、使用常数、使用多个函数,是典型的杂凑哈希。
MD5
MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由Mit Laboratory for Computer Science和Rsa data security inc的Ronald l. rivest开发出来,经md2、md3和md4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数).不管是md2、md4还是md5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要.MD5 算法的哈希值大小为 128 位。是一种不可逆的算法。