将IP地址散列为[0,H]中的数字

2024-05-13 00:16:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Python-2.6。我对散列函数知之甚少。在

我想用一个CRC散列函数将一个像'128.0.0.5'这样的IP地址散列到[0,H]范围内。目前我正在考虑

zlib.crc32('128.0.0.5')%H.

这样可以吗?有几个问题。你可以试着回答。。。在

  • 如果我散列“128.0.0.5”或其二进制文件“00011101010..”,不管是不是不带“.”,它是否会产生差异

  • 在zlib.crc32型返回有符号整数。moding(%)是否为负。如果是正的H,总是给出pos no?

  • 用H表示的%-ing是否影响哈希函数的性能?(我的意思是,在可用的空间内xlib.crc32号文件)

谢谢!在


Tags: 文件函数nopos二进制符号空间整数
3条回答

你为什么要把一个IP地址杂凑成一个数字?它们已经有了本机整数表示。例如,使用netaddr

>>> import netaddr
>>> ip = netaddr.IPAddress('192.168.1.1')
>>> ip.value
3232235777
>>> netaddr.IPAddress(3232235777)
IPAddress('192.168.1.1')

ad 1)它将产生不同的结果,但不影响哈希的质量。在

ad2)它总是产生一个正数或零。在

ad 3)由于限制了可能的存储桶的数量,这确实会影响哈希的质量。在

总的来说:你的H有多大?请记住,IPv4地址只不过是一个32位的值。192.168.0.1只是一个更具可读性的字节表示。因此,如果H大于4294967295,就不需要散列。在

does it make any diff. if I hash '128.0.0.5' or its binary '0001110101010..' whatever that is or without the '.'s

不是真的。在

zlib.crc32 returns a signed integer. Does modding (%) a neg. with a positive H always give a pos no?

是的。在

Does %-ing by H affect how good the hash function is? ( I mean is that the best I could do for the available space, with the available xlib.crc32)

你最好使用校验和的所有位来弥补它们缺乏“雪崩效应”。如192.168.1.1192.168.1.2等的单个数字变体可能只在校验和的前几位产生差异,而且由于%只关心最后一位,哈希将发生冲突。在

相关问题 更多 >