我正在使用Python-2.6。我对散列函数知之甚少。
我希望使用CRC哈希函数将IP地址(如'128.0.0.5‘)散列到范围[0,H]中。目前我正在考虑做
zlib.crc32('128.0.0.5')%H.
这样可以吗?有几个问题。你可以试着回答..。
谢谢!
发布于 2011-07-20 02:43:04
这有什么区别吗。如果我散列'128.0.0.5‘或它的二进制’0001110101010.‘不管那是什么还是没有。
不怎么有意思。
zlib.crc32返回有符号整数。对(%)进行调制。当H为正数时,总是给出一个建议,不?
是。
%-ing由H影响哈希函数的好坏吗?(我的意思是,对于可用的空间,可用的xlib.crc32,我所能做的就是最好的)
你最好用校验和的所有部分来弥补它们缺乏“雪崩效应”的缺点。单数变体(如192.168.1.1
、192.168.1.2
等)可能只在校验和的第一位产生差异,而且由于%
只关心最后几位,所以哈希将发生冲突。
发布于 2011-07-20 02:37:13
为什么要将IP地址散列为数字?它们已经有了一个本机整数表示。例如,使用netaddr
>>> import netaddr
>>> ip = netaddr.IPAddress('192.168.1.1')
>>> ip.value
3232235777
>>> netaddr.IPAddress(3232235777)
IPAddress('192.168.1.1')
发布于 2011-07-20 01:57:17
广告1)它将产生不同的结果,但不影响哈希的质量。
广告2)它总是产生一个正数或零。
广告3)由于限制了可能的桶数,它确实会影响哈希的质量。
一般来说:你的H值有多大?请记住,IPv4地址只不过是一个32位的值。192.168.0.1只是一种人类可读性更强的字节表示形式。所以如果你的H大于4294967295,就不需要散列了。
https://stackoverflow.com/questions/6756063
复制相似问题