【Python 标准库学习】安全哈希与摘要算法库 — hashlib

欢迎加入 Python 官方文档翻译团队:https://www.transifex.com/python-doc/


hashlib 模块针对不同的安全哈希和消息摘要算法实现了一个通用的接口。提供了常见的摘要算法,如MD5,SHA1等等。

摘要算法又称哈希算法、散列算法,摘要算法是单向加密的,也就是说明文通过摘要算法加密之后,是不能解密的。摘要算法的第二个特点密文是固定长度的,它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。之所以叫摘要算法,它的算法就是提取明文重要的特征。所以,两个不同的明文,使用了摘要算法之后,有可能出现他们的密文的一样,不过这个概率非常的低。

hashlib 模块官方文档:https://docs.python.org/3/library/hashlib.html


部分常用函数:

  • hashlib.new(name[, data]):指定算法,创建一个 hashable 对象

  • hash.update(data):传递类字节参数(通常是bytes)来更新hash对象,重复的调用相当于一个连接了所有参数的调用:m.update(a); m.update(b) 相当于 m.update(a+b)

  • hash.digest():返回摘要,作为二进制数据字符串值

  • hash.hexdigest():返回摘要,作为十六进制数据字符串值


MD5 算法示例

MD5 是常见的摘要算法,而单纯的 MD5 加密并不安全,通过撞库的方式,常见密码的 MD5 值很容易就能查询得到。

使用 hashlib.new() 方法来创建一个 hash 对象:

>>> import hashlib
>>> md5 = hashlib.new('md5', 'I love python!'.encode('utf-8'))
>>> md5.hexdigest()
'21169ee3acd4a24e1fcb4322cfd9a2b8'

也可以使用提供的接口指定具体调用方式:

>>> import hashlib
>>> md5 = hashlib.md5()
>>> md5.update('I love python!'.encode('utf-8'))
>>> md5.hexdigest()
'21169ee3acd4a24e1fcb4322cfd9a2b8'

数据量很大时,可以分块多次调用 update(),最后计算的结果是一样的:

>>> import hashlib
>>> md5 = hashlib.md5()
>>> md5.update('I love '.encode('utf-8'))
>>> md5.update('python!'.encode('utf-8'))
>>> md5.hexdigest()
'21169ee3acd4a24e1fcb4322cfd9a2b8'

SHA1 算法示例

SHA1 是比 MD5 更安全一点的摘要算法,MD5 的密文是 32 位,而 SHA1 是 40 位,SHA1 的升级版还有 SHA256 和 SHA512,版本越强,密文越长,代价是速度越慢。

>>> import hashlib
>>> sha1 = hashlib.new('sha1', 'I love python!'.encode('utf-8'))
>>> sha1.hexdigest()
'23c02b203bd2e2ca19da911f1d270a06d86719fb'

或者:

>>> import hashlib
>>> sha1 = hashlib.sha1()
>>> sha1.update('I love python!'.encode('utf-8'))
>>> sha1.hexdigest()
'23c02b203bd2e2ca19da911f1d270a06d86719fb'

hash.digest() 转化为 hash.hexdigest()

以 MD5 算法为例,首先使用两种方法获取一下字符串 Hello World 的 MD5 值:

>>> import hashlib
>>> md5 = hashlib.new('md5', b'Hello World')
>>> md5.hexdigest()
'b10a8db164e0754105b7a99be72e3fe5'
>>> md5.digest()
b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5'

使用 binascii 模块的 hexlify() 方法将 md5.digest() 转化为 md5.hexdigest() 结果:

>>> import binascii
>>> md5_hexdigest = binascii.hexlify(b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5')
>>> md5_hexdigest
b'b10a8db164e0754105b7a99be72e3fe5'

hash.hexdigest() 转化为 hash.digest()

使用 binascii 模块的 unhexlify() 方法将 md5.hexdigest() 转化为 md5.digest() 结果:

>>> import binascii
>>> md5_digest = binascii.unhexlify('b10a8db164e0754105b7a99be72e3fe5')
>>> md5_digest
b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python 必会技巧】[i for i in range(1,10)] — 列表解析式,列表中使用 for 循环

经常会看到类似于 [i for i in range(1,10)] 的表达式,这种表达式称为列表解析(List Comprehensions),类似的还有字典解析、集合解析等等。 列表解析式是将一个列表(实际上适用于任何可迭代对象)转换成另一…

【转】Microsoft Teams 常见问题

作者:Zimu 链接:https://www.zhihu.com/question/52246335/answer/244877022 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 功能还是很全的,能和skype、onedrive、yammer、shar…

Python 数据分析三剑客之 NumPy(一):理解 NumPy / 数组基础

CSDN 课程推荐:《Python 数据分析与挖掘》,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个…

【转】Asp.net的生命周期之应用程序生命周期

参考:http://msdn.microsoft.com/zh-cn/library/ms178473(vvs.100).aspx 参考:http://www.cnblogs.com/JimmyZhang/archive/2007/09/04/880967.html Http请求刚刚到达服务器的时候 当服务器接收到一个 Http请求的时候,IIS (Int…

Python 数据分析三剑客之 NumPy(二):数组索引 / 切片 / 广播 / 拼接 / 分割

CSDN 课程推荐:《Python 数据分析与挖掘》,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个…

【转】Asp.net的生命周期应用之IHttpModule和IHttpHandler

引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler接口的类进行处理(应该记得Page类实现了IHttpHandler)。从 Http 请求处理流程 一文的最后的一…

【转】静态类与非静态类

静态类 继承(多态)、静态本身就是相反的。另外需要知道属性、事件其实是些特殊的方法。 使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员。 static 修饰符可用于类、字段、方法、属性、运算符、事件和构造函数,但不能用于索…

Python 数据分析三剑客之 NumPy(三):数组的迭代与位运算

CSDN 课程推荐:《Python 数据分析与挖掘》,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个…

Python 数据分析三剑客之 NumPy(四):字符串函数总结与对比

CSDN 课程推荐:《Python 数据分析与挖掘》,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个…

【转】Microsoft Teams快速上手系列-02Teams组成概述及使用分享

在上一篇博客中介绍了Teams的前世今生,大家对Teams已经有了一个初步的认识,但是如上一篇文章中所说Teams是一个集成度很高的云协作平台,具体应该怎么去有效的利用起来呢?接下来这篇博客给大家全方位的分享一下Teams的组成部分以及…

Python 数据分析三剑客之 NumPy(五):数学 / 算术 / 统计 / 排序 / 条件 / 判断函数合集

CSDN 课程推荐:《Python 数据分析与挖掘》,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个…

【转】ASP.NET内幕 - IIS处理模型

介绍 微软的Active ServerPages,即ASP,自1996年首次发布以来,为Web开发者构建Web应用提供了一个丰富、复杂的框架。过去的几年它的基础架构发展的如此迅速,成为目前大家了解的ASP.NET,已经不再象它的前身。ASP.NET是构…

沉淀一年零八个月,我也拿到了博客专家

回忆 第一篇文章的发布是在 2018.08.30,虽然注册 CSDN 已有三年多了,但一直都是白嫖大佬们的文章,没有自己写东西,回想起刚开始写博客,最开始并不是在 CSDN 的,在我大二上学期的时候,网上冲浪发…

JAVA-入门(内含jdk配置)

title: java入门 date: 2019-07-21 19:50:19 tags: java学习 top: 1 JAVASE学习 1.java入门 More info: Writing //超链接 2.java开发环境配置 第一步是配置本地开发环境,学习最基本的桌面开发,下面以win10为例配置Java开发环境,即&#…

【转】EF三种编程方式的区别Database first ,Model first ,code first

首先对于EF中先出现的datebase first和model first两种编程方式,其的区别根据字面意思很容易能够理解。 datebase first就是代表数据库优先,那么前提就是先创建数据库。 model first就是代表model优先,那么前提也就是先创建model&#xf…

Python 数据分析三剑客之 NumPy(六):矩阵 / 线性代数库与 IO 操作

CSDN 课程推荐:《Python 数据分析与挖掘》,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个…

【转】学习Entity Framework 中的Code First

这是上周就写好的文章,是在公司浩哥的建议下写的,本来是部门里面分享求创新用的,这里贴出来分享给大家。 最近在对MVC的学习过程中,接触到了Code First这种新的设计模式,感觉很新颖,并且也体验到了这种方式…

HDFS--分布式文件系统

HDFS–分布式文件系统 1.Hadoop生态系统简介 2.HDFS基本架构 3.HDFS的核心原理 4.shell命令行操作 5.JAVAAPI的操作 6.HDFS集群运维与调优经验

Hbase搭建-基于hadoop3--并且解决了hbase error: KeeperErrorCode = NoNode for /hbase/master错误

Hbase搭建-基于hadoop3 habse搭建在下面。。上面写有一些我遇到的很烦躁的错误,捣鼓了两天!!! **别用hadoop3** 经过几天的奋战,开始用的hadoop3.2.0,hbase-2.2.0, Hmaster启动后几秒后被杀…