我在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。
谢谢!
答案 0 :(得分:0)
散列b'06'
和b'6'
会产生不同的结果,因为在这种情况下,'06'和'6'是不同的。
Python中的b
字符串前缀告诉Python解释器将字符串中的每个字符转换为字节。因此,b'06'
将转换为两个字节0x30 0x36
,而b'6'
将转换为单个字节0x36
。就像散列b'a'
和b' a'
(注意空格)产生不同的结果一样,散列b'06'
和b'6'
同样会产生不同的结果。
如果您不明白为什么会发生这种情况,我建议您查看字节是如何工作的,无论是在Python中还是更普遍 - Python对字节的处理总是有点违反直觉,因此如果看起来有点混乱,请不要担心!同样重要的是要注意Python表示字节的方式在Python 2和Python 3之间已经发生了变化,因此请务必检查您找到的任何信息所涉及的Python版本。你也可以在这里发表评论