我正在python 3.5中编写代码,一旦给了pcap文件和密码,它就使用hashlib为每个数据包吐出MD5加密。我正在使用pyshark遍历pcap文件。当前,它吐出的值与pcap文件中数据包上的MD5加密不同。
我将其归因于此的原因之一是,在数据包的十六进制表示中,值以前导0表示。例如:协议编号显示为b'06'。但是我更新hashlib变量的值是b'6'。并且这两个值由于相同的原因而不同:
>> b'06'==b'6'
False
我编码整数的方式是:
(hex(int(value))[2:]).encode()
我正在执行此编码,因为否则将导致此错误:“ TypeError:在散列之前必须对Unicode对象进行编码”
我想知道我是否可以得到帮助,以找到一个忽略前导0的python编码库,或者是否有任何方法可以使内置的十六进制方法忽略前导0。
谢谢!
散列b'06'
并b'6'
给出不同的结果,因为在这种情况下,“ 06”和“ 6”是不同的。
b
Python中的字符串前缀告诉Python解释器将字符串中的每个字符转换为一个字节。因此,b'06'
将被转换为两个字节0x30 0x36
,而b'6'
将被转换为单个字节0x36
。正如散列b'a'
和b' a'
(注意空格)会产生不同的结果,散列b'06'
和b'6'
同样会产生不同的结果。
如果您不明白为什么会这样,我建议您在Python以及更广泛的范围内查找字节的工作方式-Python的字节处理一直有点违反直觉,因此不要担心它似乎令人困惑!同样重要的是要注意,Python 2和Python 3之间Python表示字节的方式已经改变,因此请务必检查发现的任何信息都在检查哪个版本的Python。您也可以在这里评论
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句