首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将IP地址哈希为[0,H]中的数字

将IP地址哈希为[0,H]中的数字
EN

Stack Overflow用户
提问于 2011-07-20 01:36:40
回答 3查看 3.5K关注 0票数 4

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

我希望使用CRC哈希函数将IP地址(如'128.0.0.5‘)散列到范围[0,H]中。目前我正在考虑做

代码语言:javascript
运行
复制
zlib.crc32('128.0.0.5')%H.

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

  • 这有什么区别吗。如果我散列'128.0.0.5‘或它的二进制’0001110101010.‘不管那是什么还是没有。
  • zlib.crc32返回有符号整数。对(%)进行调制。当H为正数时,总是给出一个建议,不?
  • %-ing由H影响哈希函数的好坏吗?(我的意思是,对于可用的空间,可用的xlib.crc32,我所能做的就是最好的)

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-20 02:43:04

这有什么区别吗。如果我散列'128.0.0.5‘或它的二进制’0001110101010.‘不管那是什么还是没有。

不怎么有意思。

zlib.crc32返回有符号整数。对(%)进行调制。当H为正数时,总是给出一个建议,不?

是。

%-ing由H影响哈希函数的好坏吗?(我的意思是,对于可用的空间,可用的xlib.crc32,我所能做的就是最好的)

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

票数 2
EN

Stack Overflow用户

发布于 2011-07-20 02:37:13

为什么要将IP地址散列为数字?它们已经有了一个本机整数表示。例如,使用netaddr

代码语言:javascript
运行
复制
>>> import netaddr
>>> ip = netaddr.IPAddress('192.168.1.1')
>>> ip.value
3232235777
>>> netaddr.IPAddress(3232235777)
IPAddress('192.168.1.1')
票数 5
EN

Stack Overflow用户

发布于 2011-07-20 01:57:17

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

广告2)它总是产生一个正数或零。

广告3)由于限制了可能的桶数,它确实会影响哈希的质量。

一般来说:你的H值有多大?请记住,IPv4地址只不过是一个32位的值。192.168.0.1只是一种人类可读性更强的字节表示形式。所以如果你的H大于4294967295,就不需要散列了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6756063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档