Python md5返回错误的hexdigest

lat*_*ata 0 python md5

我的代码:

filename = filename.strip().replace(' ', '_')
filename = urllib.quote(filename.encode('utf-8')).strip()
print filename
filenameHash = hashlib.md5(filename).hexdigest()
print filenameHash
Run Code Online (Sandbox Code Playgroud)

印刷文件名哈希: 5e6243a3a207220e4e386fcde5191697

但应该是 4a8ce85f21814d6d0010a3bc5bf4f82d

文件名打印: Gda%C5%84sk_%E2%80%93_Strefa_Historyczna_Wolnego_Miasta_Gda%C5%84ska_%28D%C5%82ugi_Targ%29.JPG

怎么了?

Mar*_*ers 6

您测试MD5的页面错误地解码了两次数据:

>>> import hashlib
>>> filename = 'Gda%C5%84sk_%E2%80%93_Strefa_Historyczna_Wolnego_Miasta_Gda%C5%84ska_%28D%C5%82ugi_Targ%29.JPG'
>>> hashlib.md5(filename).hexdigest()
'5e6243a3a207220e4e386fcde5191697'
>>> hashlib.md5(urllib.unquote(filename)).hexdigest()
'4a8ce85f21814d6d0010a3bc5bf4f82d'
Run Code Online (Sandbox Code Playgroud)

比随机在线网页更信任Python模块.

另一方面,如果您打算测试文件名的UTF-8编码的MD5哈希值,那么请不要应用urllib.quote(),并且网页无意中暴露了您的方法中的错误.