起步

对于一些字符,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 类型看看:
# python2.7 >>> bytes(chr(163)) '\xa3' # python3.6 >>> chr(163).encode() b'\xc2\xa3'
python3中,在 num<128 的时候,使用 chr(num).encode('utf-8') 得到的是 一个 字符的ascii十六进制,而 num>128 的时候,使用 chr(num).encode('utf-8') 得到的是 两个 字节的ascii十六进制.
解决
改用 latin1 编码进行解码:
# python3.6
pwd = "xxx" + chr(163) + "fj"
checkcode = hashlib.md5(pwd.encode("latin1")).hexdigest()
print(checkcode) # ea25a328180680aab82b2ef8c456b4ce
额外
为什么是 latin1 编码呢.答案还是挺有意思的.
先说chr函数,通过 help(chr) 可以查看:
chr(...) chr(i) -> Unicode character Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.
意思是它返回Unicode编码中指定位置的一个字符.python3内部也是用Unicode表示左右字符,即str类型.而通过encode后会编码成 bytes 类型.
ascii编码中每个字符编码是一个byte,但只有1-127. 超过的部分128-255则属于 Extended ASCII ,python3 中默认的ascii中不包含这部分,所以如果执行 chr(163).encode("ascii") 就会报错 'ascii' codec can't encode character '\xa3' in position 3: ordinal not in range(128)
因此需要一个含有128-255中的部分字符的编码,且采用1个Byte固定大小编码,比如ISO 8859-1,也就是 latin1.当然还有其他编码如cp1252也包含这些字符的.
# python
# md5
# Python os.rename() 重命名目录和文件的示例
# Python中使用md5sum检查目录中相同文件代码分享
# Python实现定期检查源目录与备份目录的差异并进行备份功能示例
# Python3如何将源目录中的图片用MD5命名并可以设定目标目录
# 的是
# 报错
# 是一个
# 就会
# 在这里
# 结果是
# 这部
# 我用
# 如果没有
# 要将
# 将它
# 转化为
# 后会
# 这是因为
# 则会
# 先说
# 中不
# 出在
# 可以查看
# 时需
相关文章:
如何零基础在云服务器搭建WordPress站点?
济南网站制作的价格,历城一职专官方网站?
成都网站制作报价公司,成都工业用气开户费用?
如何通过商城自助建站源码实现零基础高效建站?
个人摄影网站制作流程,摄影爱好者都去什么网站?
如何在阿里云通过域名搭建网站?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
建站之星如何优化SEO以实现高效排名?
如何在Golang中使用replace替换模块_指定本地或远程路径
网站图片在线制作软件,怎么在图片上做链接?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
如何用PHP快速搭建高效网站?分步指南
nginx修改上传文件大小限制的方法
如何选择高效响应式自助建站源码系统?
英语简历制作免费网站推荐,如何将简历翻译成英文?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
如何快速辨别茅台真假?关键步骤解析
七夕网站制作视频,七夕大促活动怎么报名?
建站之星导航菜单设置与功能模块配置全攻略
网站制作大概多少钱一个,做一个平台网站大概多少钱?
Android自定义控件实现温度旋转按钮效果
如何在万网主机上快速搭建网站?
建站之星代理费用多少?最新价格详情介绍
已有域名和空间如何快速搭建网站?
,如何利用word制作宣传手册?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
网站制作免费,什么网站能看正片电影?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
太原网站制作公司有哪些,网约车营运证查询官网?
javascript中的try catch异常捕获机制用法分析
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
建站之星Pro快速搭建教程:模板选择与功能配置指南
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
如何选择靠谱的建站公司加盟品牌?
重庆市网站制作公司,重庆招聘网站哪个好?
常州自助建站费用包含哪些项目?
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
如何快速搭建响应式可视化网站?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
如何通过VPS建站无需域名直接访问?
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
如何通过宝塔面板实现本地网站访问?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
家庭服务器如何搭建个人网站?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
音乐网站服务器如何优化API响应速度?
Python lxml的etree和ElementTree有什么区别
javascript基本数据类型及类型检测常用方法小结
学校为何禁止电信移动建设网站?
如何快速生成专业多端适配建站电话?
*请认真填写需求信息,我们会在24小时内与您取得联系。