这篇文章主要介绍了python版本坑:md5例子(python2与python3中md5区别),需要的朋友可以参考下
起步
对于一些字符,python2和python3的md5加密出来是不一样的.
# python2.7
pwd = "xxx" + chr(163) + "fj"
checkcode = hashlib.md5(pwd).hexdigest()
print checkcode # ea25a328180680aab82b2ef8c456b4ce
# python3.6
pwd = "xxx" + chr(163) + "fj"
checkcode = hashlib.md5(pwd.encode("utf-8")).hexdigest()
print(checkcode) # b517e074034d1913b706829a1b9d1b67
按代码差异来将,就是在python3中需要对字符串进行 encode 操作,如果没有则会报错:
checkcode = hashlib.md5(pwd).hexdigest()
TypeError: Unicode-objects must be encoded before hashing
这是因为加密时需要将字符串转化为 bytes 类型,3默认编码是 utf-8 .所以我用utf-8进行解码.
分析
如果字符串中没有 chr(163) ,那么两个版本结果是一致的,也就是说问题出在这个chr(163)中:
# python2.7
>>> chr(163)
'\xa3'
# python3.6
>>> chr(163)
'\xa3'
在这里说明通过 chr 得到的结果是一致的, 将它转为 bytes 类型看看: