在python3的标准库中,已经移除了md5,而关于hash加密算法都放在hashlib这个标准库中,如SHA1、SHA224、SHA256、SHA384、SHA512和MD5算法等。

另:在网上找关于python的md5加密,发现要不是比较旧的不适用当前py版本的文章,或者是说得不够清楚的文章,所以还是自己去看下官方文档比较好,顺便整理下关于md5的使用方法。

对于学习任何一门程序类知识,我都认为去看官方文档这种学习方式最有效的之一,只不过一般这些文档都是英文版的,对于一些学习者来说可能会有一定门槛,但习惯于阅读英文文章,是非常重要的。

建议直接阅读python3的hashlib文档: 
https://docs.python.org/3/library/hashlib.html?highlight=hashlib#credits

在hashlib库的hash算法中,提供了很多加密算法,有 sha1()、sha224()、sha256()、sha384()、sha512()、blake2b()和 blake2s()、md5(),这些方法都通过统一接口返回一个对象,例如,使用sha256()可以创建一个SHA-256的哈希对象。

当然,进行md5加密算法,就要用到md5()方法:

>>> import hashlib
>>> m = hashlib.md5()
>>> m.update(b'123')                                              # python2时,是不是byte类型都可以,python3,非byte报错
>>> m.hexdigest()
'202cb962ac59075b964b07152d234b70'

# 或者可以这样
>>> hashlib.md5(b'123').hexdigest()
'202cb962ac59075b964b07152d234b70'

# 也可以使用hash.new()这个一般方法
>>> hashlib.new('md5', b'123').hexdigest()
'202cb962ac59075b964b07152d234b70'

以上是对于英文进行md5加密的,如果要对中文进行加密,发现按照上面来写会报错,原因在于字符转码问题,要如下写:

>>> import hashlib
>>> data = '你好'
>>> hashlib.md5(data.encode(encoding='UTF-8')).hexdigest()           # python2 时不需要encode
'7eca689f0d3389d9dea66ae112e5cfd7'

此处先将数据转换成UTF-8格式的,使用网上工具对比下加密的结果,发现有的md5加密工具并不是使用UTF-8格式加密的。 
经测试目前发现可以转为UTF-8、GBK、GB2312、GB18030,不分大小写(因为GBK/GB2312/GB18030均是针对汉字的编码,所以md5加密后结果一样)。 
除了这些编码格式之外,还会有其他编码的,目前还没发现,等各位补充。 
看下面实例:

>>> hashlib.md5('你好'.encode(encoding='UTF-8')).hexdigest()
'7eca689f0d3389d9dea66ae112e5cfd7'

>>> hashlib.md5('你好'.encode(encoding='GBK')).hexdigest()
'b94ae3c6d892b29cf48d9bea819b27b9'

>>> hashlib.md5('你好'.encode(encoding='GB2312')).hexdigest()
'b94ae3c6d892b29cf48d9bea819b27b9'

>>> hashlib.md5('你好'.encode(encoding='GB18030')).hexdigest()
'b94ae3c6d892b29cf48d9bea819b27b9'

如果你仅仅查md5的写法,看上面实例就够了; 
如果你是python新手,想了解这些方法的意思和用法,继续看下面内容。

解析
1. hashlib.new(name[, data])方法
这是个一般性方法。 
name传入的是哈希加密算法的名称,如md5; 
data传入的是需要加密的数据,可忽略,在之后update()中传入。

>>> m = hashlib.new('md5')
>>> m.update(b'123456')
>>> m.hexdigest()
'202cb962ac59075b964b07152d234b70'

可以使用hashlib.algorithms_guaranteed或者hashlib.algorithms_available这两个内置属性查看hashlib支持哪些加密算法。

hashlib.algorithms_guaranteed是在所有平台上,保证被hashlib模块支持的hash算法名称的集合; 
hashlib.algorithms_available是在当前运行的python编译器可用的hash算法名称的集合,由于OpenSSL的原因,在这当中可能会出现重复的hash算法名称。 
hashlib.algorithms_guaranteed是hashlib.algorithms_available的子集。 
看下面输出:

>>> hashlib.algorithms_guaranteed
{'sha3_384', 'md5', 'blake2s', 'sha3_512', 'blake2b', 'shake_128', 'sha384', 'sha3_256', 'sha1', 'shake_256', 'sha3_224', 'sha512', 'sha256', 'sha224'}
>>> hashlib.algorithms_available
{'whirlpool', 'ripemd160', 'dsaEncryption', 'sha1', 'SHA224', 'sha512', 'sha256', 'SHA512', 'blake2s', 'blake2b', 'SHA256', 'sha384', 'sha3_256', 'SHA384', 'sha', 'sha224', 'RIPEMD160', 'shake_128', 'sha3_512', 'SHA', 'MD5', 'shake_256', 'DSA', 'sha3_384', 'DSA-SHA', 'ecdsa-with-SHA1', 'md5', 'SHA1', 'dsaWithSHA', 'md4', 'MD4', 'sha3_224'}

2. hash.update(arg)
传入arg对象来更新hash的对象。必须注意的是,该方法只接受byte类型,否则会报错。这就是要在参数前添加b 来转换类型的原因:

>>> m = hashlib.md5()
>>> m.update('123456')
TypeError: Unicode-objects must be encoded before hashing

同时要注意,重复调用update(arg)方法,是会将传入的arg参数进行拼接,而不是覆盖。必须注意这一点,因为你在不熟悉update()原理的时候,你很可能就会被它坑了。 
也就是说,m.update(a); m.update(b) 等价于m.update(a+b),看下面例子:

>>> m = hashlib.md5()
>>> m.update(b'123')
>>> m.hexdigest()
'202cb962ac59075b964b07152d234b70'
>>> m.update(b'456')
>>> m.hexdigest()
'e10adc3949ba59abbe56e057f20f883e'

>>> hashlib.md5(b'123456').hexdigest()
'e10adc3949ba59abbe56e057f20f883e'

3. hash.hexdigest()
都知道,在英语中hex有十六进制的意思,因此该方法是将hash中的数据转换成数据,其中只包含十六进制的数字。另外还有hash.digest()方法。

原文:https://blog.csdn.net/m0_38080253/article/details/78838489

python3 的 md5加密相关推荐

  1. python md5加密_Python MD5加密实例详解

    详解Python MD5加密 Python 3下MD5加密 # 由于MD5模块在python3中被移除 # 在python3中使用hashlib模块进行md5操作 import hashlib # 待 ...

  2. python2 md5库_python版本坑:md5例子(python2与python3中md5区别)

    起步 对于一些字符,python2和python3的md5加密出来是不一样的. # python2.7 pwd = "xxx" + chr(163) + "fj" ...

  3. python3 中的 md5 加密

    转载申明:https://blog.csdn.net/m0_38080253/article/details/78838489 在python3的标准库中,已经移除了md5,而关于hash加密算法都放 ...

  4. 【Python】hashlib模块实现MD5加密

    MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被计算机安全领域广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value), ...

  5. Jmeter MD5加密及其运用

    常用的几种加密方式 内置函数_MD5加密 参数说明: String to calculate MD5 hash(必填):要加密的字符串 Name of variable in which to sto ...

  6. Python中MD5加密

    MD5是什么 下面的概念是百度百科的: Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的 ...

  7. python md5加密_如何用python“优雅”的调用有道翻译?

    前言 其实在以前就盯上有道翻译了的,但是由于时间问题一直没有研究(我的骚操作还在后面,记得关注),本文主要讲解如何用python调用有道翻译,讲解这个爬虫与有道翻译的js"斗争"的 ...

  8. python中md5加密的实现(hashlib)

    MD5消息摘要算法:(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传 ...

  9. python实现md5加密和解密_Python中的加密和解密

    1.base64 Python内置的base64模块可以实现base64.base32.base16.base85.urlsafe_base64的编码解码,python 3.x通常输入输出都是二进制形 ...

最新文章

  1. Golang 要注意的陷阱和常见错误
  2. kafka的一些常用命令
  3. AngularJs学习
  4. 手持移动端特殊链接:打电话,发短信,发邮件
  5. align_center在JAVA_margin:0 auto与body{text-align:center;}实现元素居中的区别
  6. iphone解锁_有人可以用解锁的iPhone做的最糟糕的事情是什么?
  7. Java中的观察者设计模式
  8. PMP备考指南之第一章:引论
  9. 罗宾斯管理学13版pdf_上海外国语工商管理经验贴(上外工商管理学硕)
  10. GitHub 推出安全新功能,帮助开源软件发现漏洞和机密信息
  11. Linux rpm 命令参数详解
  12. 小米路由器3无线网连接到服务器,小米路由器3上不了网(不能上网)怎么办?
  13. Word如何使用预设样式、自定样式以及生成自动目录教程
  14. 写于即将23岁的前端转正前夕
  15. SequoiaDB巨杉数据库-配置
  16. 2018年第九届蓝桥杯真题解析 | 日志统计【Python】
  17. 【小程序开发之准备工作】如何开通云开发和CMS内容管理平台
  18. 简单方法解决火狐浏览器主页被篡改/挟持,主页变成垃圾网站的问题
  19. 996加班骗局被揭穿,背后真相值得深思!
  20. 3d效果图制作傻瓜软件_3D效果图制作哪个软件是最适合的?

热门文章

  1. 常见的数据可视化方式
  2. flask上传图片以及生成缩略图
  3. 电脑计算机提示msvcr100.dll丢失如何修复,msvcr100.dll丢失的解决方法
  4. 4K 显示器突然变模糊了怎么调回来
  5. java动物类问题_java实现动物特性的面向对象的描述(三个阶段)
  6. 使用正则表达式检测帐号规范
  7. iOS开发关于“发送原图”功能问题的记录
  8. 虚拟化 Hypervisor
  9. 【CISSP备考笔记】第2章:资产安全
  10. 如何选择适合自己的研究方法?定性vs定量vs混合方法研究