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值相关推荐

  1. (转)Python 用hashlib求中文字符串的MD5值

    使用过hashlib库的朋友想必都遇到过以下的错误吧:"Unicode-objects must be encoded before hashing",意思是在进行md5哈希运算前 ...

  2. python官网没有中文-python 检查是否为中文字符串的方法

    [目标需求] 查看某一个字符串是否为中文字符串 [解决办法] def check_contain_chinese(check_str): for ch in check_str: if u'一' &l ...

  3. python 中文字符串截取,Python实现针对含中文字符串的截取功能示例

    本文实例讲述了Python实现针对含中文字符串的截取功能.分享给大家供大家参考,具体如下: 对于含多字节的字符串,进行截断的时候,要判断截断处是几字节字符,不能将多字节从中分割,避免截断后乱码 下面给 ...

  4. 求一个字符串的hash值

    转载自:http://www.cnblogs.com/jiu0821/p/4554352.html 求一个字符串的hash值: •现在我们希望找到一个hash函数,使得每一个字符串都能够映射到一个整数 ...

  5. 使用java求中文字符串所有子序列(子字符串)

    public class ChineseTest {public static void main(String[] args) {String word="我是中文字符串";Bo ...

  6. java excel md5_EXCEL VBA计算带汉字的字符串的MD5值(VBA转UTF-8保存)

    操作思路: 1.使用 ADODB.stream 把字符串转换为UFT-8的编码集存储到文件 AA 2.使用调用windows命令行CertUtil -hashfile c:\11\AA md5 对文件 ...

  7. python hashlib_python hashlib模块及md5() 、sha()

    hashlib模块是python2.5 以后出现的一个包,其主要涉及安全和加密.而且hashlib 得到openssl 的"支持" ,其支持openssl 库提供的所有算法,具体包 ...

  8. Python计算文件或字符串的MD5/SHA

    本文章讲如何通过Python实现计算文件或字符串的MD5, SHA1, SHA224, SHA256, SHA384, SHA512值. 原文:https://blog.zeruns.tech/arc ...

  9. python 获取字符串MD5值

    工作中用到了MD5值来进行对文件校验,MD5本身就是一个很出色的算法,一定程度上解决了hash散列的冲突,关于MD5的内容网上也有很多,这里只要是进行一个实验,验证一下文件校验方面的工作,因为习惯使用 ...

最新文章

  1. 视频+课件|基于深度学习方式的多视图立体匹配算法
  2. Windows Management Instrumentation WMI Security Technology Learning
  3. thinkphp验证码功能
  4. Angular sort recursive的实现原理
  5. 基于Nexys4 DDR的VGA显示图片
  6. Chrome浏览器无法观看视频,一直提示“adobe flash player 已过期” ?
  7. mysql+after+commit_Spring事务aftercommit原理及实践
  8. 生成多个 SSH-Key 、生成多个公钥和私钥
  9. 机器学习十大经典算法——随机森林
  10. java--idea--生成jar包-2
  11. 光伏并网发电及低电压穿越技术
  12. matlab 输出一行字,MATLAB输出结果的格式设置
  13. 河北对口升学计算机VB知识点,vb对口升学试题.docx
  14. LaTeX中插入文本框并且设置文本框底色(填充色)的方法
  15. matlab实现将彩色图像转换成灰色图像的方法
  16. Windows Server 2012R2 虚拟专用网络技术
  17. 「Nescafé26」 Freda的传呼机 【树上倍增+图论】
  18. 网格化垃圾监控管理系统介绍
  19. android 数组赋值字符串_字符串数组的赋值
  20. 2022-2028全球2,5-二甲基呋喃(DMF)行业调研及趋势分析报告

热门文章

  1. 读取Android系统的多媒体库
  2. JDBC连接本地sqlserver2005的方法
  3. ubuntu 安装fcitx输入法(3.6和4.0bate)
  4. 语言认知偏差_我们的认知偏差正在破坏患者的结果数据
  5. leetcode1504. 统计全 1 子矩形(动态规划)
  6. 大数据分析要学习什么_为什么要学习数据分析
  7. arcore_如何使用ARCore和Android Studio构建增强现实Android应用
  8. 微信sdk swift版_使用Swift 4的iOS版Google Maps SDK终极指南
  9. 这三种策略可以帮助女性在科技领域蓬勃发展
  10. 速度与激情的Webpack