忽略前导0的Python编码

时间:2016-08-01 20:42:18

标签: python encryption hex md5 encode

我在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。

谢谢!

1 个答案:

答案 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版本。你也可以在这里发表评论