Python 2 vs 3. Same inputs, different results. MD5 hash Python 2 vs 3. Same inputs, different results. MD5 hash python-3.x python-3.x

Python 2 vs 3. Same inputs, different results. MD5 hash


Use hashlib & a language agnostic implementation instead:

import hashlibtext = u'bf5¤7¤8¤3'text = text.encode('utf-8')print(hashlib.md5(text).hexdigest())

works in Python 2/3 with the same result:

Python2:

'61d91bafe643c282bd7d7af7083c14d6'

Python3 (via repl.it):

'61d91bafe643c282bd7d7af7083c14d6'

The reason your code is failing is the encoded string is not the same string as the un-encoded one: You are only encoding for Python 3.


If you need it to match the unencoded Python 2:

import hashlibtext = u'bf5¤7¤8¤3'print(hashlib.md5(text.encode("latin1")).hexdigest())

works:

46440745dd89d0211de4a72c7cea3720

the default encoding for Python 2 is latin1 not utf-8


Default encoding in python3 is Unicode. In python 2 it's ASCII. So even if string matches when read they are presented differently.