我通过它们的5 元组(src IP、dst 端口、sport、dport、传输协议号)来识别 Internet流量,并且我想将这个 5 元组转换为更紧凑的字母数字 ID,供我的脚本内部使用。
我在 Python 中有哪些选择?
我读到内置函数hash
只是OS-wise 一致的,所以我更喜欢别的东西。
我只需要处理不超过几百个不同的 5 元组。
只需选择您自己的哈希函数:
import hashlib
hash = hashlib.md5()
t = (1, 2, 3, 4, 5) # whatever
t_as_string = str(t)
hash.update(t_as_string)
print hash.hexdigest()
您可以使用hashlib中的任何函数。而且由于这不是安全问题,因此哪个并不重要...
但是:想打赌,比较元组会更快/更有效吗?
以下 Python Hash 函数由 Ewen Cheslack-Postava 编写,在多个操作系统和 CPU 中应保持一致: https ://pypi.python.org/pypi/pyhashxx/
您是否担心跨操作系统的冲突?那是你的问题吗?
但是由于您只处理几百个 5 元组,因此您不能应用某种哈希合谋解决技术,例如链接或开放寻址等。
如果我没有遗漏任何其他内容,我相信上述方法比自己设计一个新的散列算法要好。