Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将hexdigest()的结果与字符串进行比较_Python_String Comparison_Python 2.x_Hashlib - Fatal编程技术网

Python 将hexdigest()的结果与字符串进行比较

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"

我得到了一个生成的MD5哈希,我想将其与字符串中的另一个MD5哈希进行比较。下面的陈述是错误的,即使它们在打印时看起来是一样的,应该是正确的

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添加了一个用于安全哈希比较的函数: