Python 将hexdigest()的结果与字符串进行比较
我得到了一个生成的MD5哈希,我想将其与字符串中的另一个MD5哈希进行比较。下面的陈述是错误的,即使它们在打印时看起来是一样的,应该是正确的Python 将hexdigest()的结果与字符串进行比较,python,string-comparison,python-2.x,hashlib,Python,String Comparison,Python 2.x,Hashlib,我得到了一个生成的MD5哈希,我想将其与字符串中的另一个MD5哈希进行比较。下面的陈述是错误的,即使它们在打印时看起来是一样的,应该是正确的 hashlib.md5("foo").hexdigest() == "acbd18db4cc2f85cedef654fccc4a4d8" 谷歌告诉我应该对hexdigest()的结果进行编码,因为它不会返回字符串。然而,下面的代码似乎也不起作用 hashlib.md5("foo").hexdigest().encode("utf-8") == "foo"
hashlib.md5("foo").hexdigest() == "acbd18db4cc2f85cedef654fccc4a4d8"
谷歌告诉我应该对hexdigest()
的结果进行编码,因为它不会返回字符串。然而,下面的代码似乎也不起作用
hashlib.md5("foo").hexdigest().encode("utf-8") == "foo".encode("utf-8")
。在python-2.x中,第一条语句返回True
在python-3.x中,您需要将参数编码到md5
函数中,在这种情况下,等式也是True
。如果不进行编码,它将引发TypeError
Python2.7,.hexdigest()将返回一个str
>>> hashlib.md5("foo").hexdigest() == "acbd18db4cc2f85cedef654fccc4a4d8"
True
>>> type(hashlib.md5("foo").hexdigest())
<type 'str'>
hashlib.md5(“foo”).hexdigest()=“acbd18db4cc2f85cedef654fccc4a4d8”
真的
>>>类型(hashlib.md5(“foo”).hexdigest()
Python 3.1
.md5()不接受unicode(即“foo”),因此需要将其编码为字节流
>>> hashlib.md5("foo").hexdigest()
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
hashlib.md5("foo").hexdigest()
TypeError: Unicode-objects must be encoded before hashing
>>> hashlib.md5("foo".encode("utf8")).hexdigest()
'acbd18db4cc2f85cedef654fccc4a4d8'
>>> hashlib.md5("foo".encode("utf8")).hexdigest() == 'acbd18db4cc2f85cedef654fccc4a4d8'
True
hashlib.md5(“foo”).hexdigest()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
hashlib.md5(“foo”).hexdigest()
TypeError:在散列之前必须对Unicode对象进行编码
>>>hashlib.md5(“foo”.encode(“utf8”)).hexdigest()
“acbd18db4cc2f85cedef654fccc4a4d8”
>>>hashlib.md5(“foo”.encode(“utf8”)).hexdigest()=“acbd18db4cc2f85cedef654fccc4a4d8”
真的
使用==进行哈希比较可能是一个安全漏洞
攻击者可以查找时间差异并有效地遍历键空间,找到一个将通过相等性测试的值。您的最后一段代码工作正常。不知何故,在AppEngine开发服务器上测试时没有收到错误消息。我应该在python控制台中测试它。很抱歉,我下次会这么做。Python 3.3添加了一个用于安全哈希比较的函数: