廖雪峰的官方网站学习MD5加密,网址:“http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868328251266d86585fc9514536a638f06b41908d44000”

报“TypeError: Unicode-objects must be encoded before hashing”这种错误呢其实意思是在进行md5运算前,需要对数据进行编码。我运用的python版本与大佬的版本不符导致我出现了错误。出现这种错误推荐网址“http://blog.csdn.net/haungrui/article/details/6959340”

运行实例:

hashlib.md5(data)函数中,data参数的类型应该是bytes。也就是说我们在进行hash前必须把数据转换成bytes类型:

 import hashlib
m = hashlib.md5(b'') # b代表bytes型
m0 = hashlib.md5(b'abc')
mi = m.hexdigest()
mi0 = m0.hexdigest()
print(mi)
print(mi0)

运行结果:

 202cb962ac59075b964b07152d234b70
900150983cd24fb0d6963f7d28e17f72

对于中文,则进行转码:

 import hashlib
data='你好'
m = hashlib.md5(data.encode('gb2312'))
mi = m.hexdigest()
---------------------------------------------------
m0 = hashlib.md5(data.encode('utf8'))
mi0 = m.hexdigest()
print(mi)
print(mi0)
#运行结果如下(gb2312,utf8一样):
# 39505368546302be2704b3d53b24203c
# 39505368546302be2704b3d53b24203c
# 还可以试试这些编码:encode("mbcs")、encode("unicode_escape")
# 以及encode("raw_unicode_escape") # -----数字时相同:
# c812727996fbf2201fa5ecc0acdccff0
# c812727996fbf2201fa5ecc0acdccff0
# -----英文时相同:
# 39505368546302be2704b3d53b24203c
# 39505368546302be2704b3d53b24203c
# -----中文时编码不同,结果不同:
# f69c425381d6d8936733c6737f7d5a68
# 0342b5aff1e19bfaaa604e265278e317
# -----中英结合,中数结合以及中英数三者结合,结果都不同(只有有中文,就不同):
# 54f836634530a76a2c06e49123f06f1c
# 3dd056aefd606c44abc9d178e0c1170a

为什么不能直接hashlib.md5(data),非要强制进行编码转换,设计者的初衷何在?中文字符在Python中是以什么形式存在?

 print('%x'%ord(data[0]))
4f60

中文字符在Python中是以unicode存在的。至此,所有的疑问都得以解除了。
在hash前要求进行编码转换,是因为同一个字符串在不同的编码体系下有不同的值,为确保不发生歧义必须要进行一次显性转换。

Python 用hashlib。md5加密算法的更多相关文章

  1. python中hashlib md5

    如下两种方法,结果相同 import hashlib import time m = hashlib.md5() m.update(str(time.time()).encode('utf-8')) ...

  2. 关于python的hashlib md5的报错处理

    1.报错信息是:TypeError: Unicode-objects must be encoded before hashing 2.报错信息是:TypeError: object supporti ...

  3. Python中hashlib模块

    介绍hashlib hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512. ...

  4. 通过python的hashlib模块计算一个文件的MD5值

    Python的hashlib提供了很多摘要算法,如MD5,SHA1等常用算法. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(如MD5值 ...

  5. python接口自动化测试二十七:密码MD5加密 ''' MD5加密 ''' # 由于MD5模块在python3中被移除 # 在python3中使用hashlib模块进行md5操作 import hashlib # 待加密信息 str = 'asdas89799,.//plrmf' # 创建md5对象 hl = hashlib.md5() # Tips # 此处必须声明encode # 若写法为

    python接口自动化测试二十七:密码MD5加密   ''' MD5加密 '''# 由于MD5模块在python3中被移除# 在python3中使用hashlib模块进行md5操作import has ...

  6. Python 用hashlib求中文字符串的MD5值 (转自 haungrui的专栏)

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

  7. python之hashlib模块(MD5校验)

    示例:大文件md5校验 def md5(fileMd5): import hashlib md5_value = hashlib.md5() with open(fileMd5,'rb') as f: ...

  8. python学习笔记(16)hashlib.md5摘要算法(哈希算法)

    一.摘要算法格式 import hashlib #导入hashlib模块 md = hashlib.md5() #获取一个md5加密算法对象 md.update('how to use md5 in ...

  9. python里面的MD5加密 ---# hashlib包的使用

    在应用程序的接口里,常用到签名:其中签名里用到MD5加密,这里用hashlib实现 hashlib 概念:Hash,译做"散列",也有直接音译为"哈希"的.把任 ...

随机推荐

  1. selenium元素定位方法

    一.如何找到页面元素 Webdriver的findElement方法可以用来找到页面的某个元素,最常用的方法是用id和name查找.下面介绍几种比较常用的方法. 1.1By ID 假设页面写成这样:i ...

  2. HttpStatus

    /* * Copyright 2002-2017 the original author or authors. * * Licensed under the Apache License, Vers ...

  3. 从golang-gin-realworld-example-app项目学写httpapi (六)

    https://github.com/gothinkster/golang-gin-realworld-example-app/blob/master/users/validators.go 验证器 ...

  4. winfrom 实现窗体圆角

    在窗体中加入一下代码 #region 窗体圆角的实现 private void ComFrmBase_Resize(object sender, EventArgs e) { if (this.Win ...

  5. 如何在windows下用IDA优雅调试ELF

    在windows下如何用IDA优雅调试ELF brief: 构建一个IDA-linux_server-docker镜像,优雅地IDA远程调试 使用传统虚拟机来运行一个linux程序就得跑一个完整的li ...

  6. 7、Node.js EventEmitter

    #######################################################################################介绍Node.js Eve ...

  7. 函数去抖(debounce)与 函数节流(throttle)

    以下场景往往由于事件频繁被触发,因而频繁执行DOM操作.资源加载等重行为,导致UI停顿甚至浏览器崩溃. 1. window对象的resize.scroll事件 2. 拖拽时的mousemove事件 3 ...

  8. luogu P1272 重建道路

    嘟嘟嘟 这好像是一种树上背包. 我们令dp[i][j] 表示在 i 所在的子树中(包括节点 i)分离出一个大小为 j 的子树最少需割多少条边. 那么转移方程就是 dp[u][j] = min(dp[u ...

  9. [USACO09MAR]Look Up

    嘟嘟嘟 题面说的有点问题,应该是向后看齐. 于是我们维护一个单调递减栈,如果当前a[i]比栈顶元素大,就执行pop操作,然后把pop出来的元素的答案都用 i 更新即可. #include<cst ...

  10. 7、Spring -Cloud-路由网管Spring Cloud Zuul

    7.1.为什么需要Zuul Zuul 作为路由网关组件,在微服务架构中有着非常重要的作用: 7.2.Zuul的工作原理 Zuul 是通过 Servlet 来实现的, Zuul 通过自定义的 Zuu!S ...