Python 用hashlib求中文字符串的MD5值
From: http://blog.csdn.net/haungrui/article/details/6959340
使用过hashlib库的朋友想必都遇到过以下的错误吧:“Unicode-objects must be encoded before hashing”,意思是在进行md5哈希运算前,需要对数据进行编码。而且在不同版本的Python下还有所不同,唉Python还需努力啊,接口和消息都很不稳定。
hashlib.md5(data)函数中,data参数的类型应该是bytes。也就是说我们在进行hash前必须把数据转换成bytes类型,对于C程序而言似乎没有类似问题,指针强制转换就OK了。
对于中文,有朋友建议转为utf8,同一中文字符串在gb2312和utf8下的值显然是不一样的(连长度都不一样),hash出来的md5会一样吗?
下面是正确的示例:
data = "你好"
m = hashlib.md5(data.encode("gb2312"))
print(m.hexdigest())
如果需要utf8编码下的md5&值,就该是m = hashlib.md5(data.encode("utf8"))。还可以试试:encode("mbcs")、encode("unicode_escape")以及encode("raw_unicode_escape")
问题解决了,但是心头的疑问却更多了。为什么不能直接hashlib.md5(data),非要强制进行编码转换,设计者的初衷何在?中文字符在Python中是以什么形式存在?
print('%x'%ord(data[0]))
4f60
说明中文字符在Python中是以unicode存在的。至此,所有的疑问都得以解除了。
在hash前要求进行编码转换,是因为同一个字符串在不同的编码体系下有不同的值,为确保不发生歧义必须要进行一次显性转换。
Python 用hashlib求中文字符串的MD5值相关推荐
- (转)Python 用hashlib求中文字符串的MD5值
使用过hashlib库的朋友想必都遇到过以下的错误吧:"Unicode-objects must be encoded before hashing",意思是在进行md5哈希运算前 ...
- python官网没有中文-python 检查是否为中文字符串的方法
[目标需求] 查看某一个字符串是否为中文字符串 [解决办法] def check_contain_chinese(check_str): for ch in check_str: if u'一' &l ...
- python 中文字符串截取,Python实现针对含中文字符串的截取功能示例
本文实例讲述了Python实现针对含中文字符串的截取功能.分享给大家供大家参考,具体如下: 对于含多字节的字符串,进行截断的时候,要判断截断处是几字节字符,不能将多字节从中分割,避免截断后乱码 下面给 ...
- 求一个字符串的hash值
转载自:http://www.cnblogs.com/jiu0821/p/4554352.html 求一个字符串的hash值: •现在我们希望找到一个hash函数,使得每一个字符串都能够映射到一个整数 ...
- 使用java求中文字符串所有子序列(子字符串)
public class ChineseTest {public static void main(String[] args) {String word="我是中文字符串";Bo ...
- java excel md5_EXCEL VBA计算带汉字的字符串的MD5值(VBA转UTF-8保存)
操作思路: 1.使用 ADODB.stream 把字符串转换为UFT-8的编码集存储到文件 AA 2.使用调用windows命令行CertUtil -hashfile c:\11\AA md5 对文件 ...
- python hashlib_python hashlib模块及md5() 、sha()
hashlib模块是python2.5 以后出现的一个包,其主要涉及安全和加密.而且hashlib 得到openssl 的"支持" ,其支持openssl 库提供的所有算法,具体包 ...
- Python计算文件或字符串的MD5/SHA
本文章讲如何通过Python实现计算文件或字符串的MD5, SHA1, SHA224, SHA256, SHA384, SHA512值. 原文:https://blog.zeruns.tech/arc ...
- python 获取字符串MD5值
工作中用到了MD5值来进行对文件校验,MD5本身就是一个很出色的算法,一定程度上解决了hash散列的冲突,关于MD5的内容网上也有很多,这里只要是进行一个实验,验证一下文件校验方面的工作,因为习惯使用 ...
最新文章
- 视频+课件|基于深度学习方式的多视图立体匹配算法
- Windows Management Instrumentation WMI Security Technology Learning
- thinkphp验证码功能
- Angular sort recursive的实现原理
- 基于Nexys4 DDR的VGA显示图片
- Chrome浏览器无法观看视频,一直提示“adobe flash player 已过期” ?
- mysql+after+commit_Spring事务aftercommit原理及实践
- 生成多个 SSH-Key 、生成多个公钥和私钥
- 机器学习十大经典算法——随机森林
- java--idea--生成jar包-2
- 光伏并网发电及低电压穿越技术
- matlab 输出一行字,MATLAB输出结果的格式设置
- 河北对口升学计算机VB知识点,vb对口升学试题.docx
- LaTeX中插入文本框并且设置文本框底色(填充色)的方法
- matlab实现将彩色图像转换成灰色图像的方法
- Windows Server 2012R2 虚拟专用网络技术
- 「Nescafé26」 Freda的传呼机 【树上倍增+图论】
- 网格化垃圾监控管理系统介绍
- android 数组赋值字符串_字符串数组的赋值
- 2022-2028全球2,5-二甲基呋喃(DMF)行业调研及趋势分析报告
热门文章
- 读取Android系统的多媒体库
- JDBC连接本地sqlserver2005的方法
- ubuntu 安装fcitx输入法(3.6和4.0bate)
- 语言认知偏差_我们的认知偏差正在破坏患者的结果数据
- leetcode1504. 统计全 1 子矩形(动态规划)
- 大数据分析要学习什么_为什么要学习数据分析
- arcore_如何使用ARCore和Android Studio构建增强现实Android应用
- 微信sdk swift版_使用Swift 4的iOS版Google Maps SDK终极指南
- 这三种策略可以帮助女性在科技领域蓬勃发展
- 速度与激情的Webpack