python --- hashlib模块使用详解
这个模块实现了一个通用的接口来实现多个不同的安全哈希和消息摘要算法。包括FIPS安全散列算法SHA1,SHA224,SHA256,SHA384和SHA512(在FIPS 180-2中定义)以及RSA的MD5算法(在因特网 RFC 1321术语“安全散列”和“消息摘要”是可互换的。较旧的算法被称为消息摘要。现代术语是安全哈希。
每种类型的哈希都具有一个命名构造函数(此模块中始终存在的散列算法的构造函数为md5()
,sha1()
,sha224()
,sha256()
,sha384()
和sha512()
)。可以使用update()
方法以类字节对象填充这个对象(通常为字节
)。在连接数据的任何时候,都可以使digest()
或hexdigest()
方法来向它请求摘要。
例一(计算一串数据的MD5):
import hashlib str1 = b"hello "
str2 = b"world"
str3 = b"hello world" m1 = hashlib.md5() #生成一个md5对象
m1.update(str1) #以bytes类型填充md5对象
m1.update(str2)
m2 = hashlib.md5()
m2.update(str3) #digest()返回传递给update()方法的数据的摘要。它是一个大小为digest_size的字节对象,包含的字节可以在0到255整个范围。
print("m1 hexdigest: ", m1.digest())
print("m2 hexdigest: ", m2.digest())
#hexdigest()类似digest(),但是摘要以2倍长度的字符串对象返回,只包含十六进制数字。这可用于在电子邮件或其它非二进制环境中安全交换数据。
print("m1 hexdigest: ", m1.hexdigest())
print("m2 hexdigest: ", m2.hexdigest()) >>>:
m1 hexdigest: b'^\xb6;\xbb\xe0\x1e\xee\xd0\x93\xcb"\xbb\x8fZ\xcd\xc3'
m2 hexdigest: b'^\xb6;\xbb\xe0\x1e\xee\xd0\x93\xcb"\xbb\x8fZ\xcd\xc3'
m1 hexdigest: 5eb63bbbe01eeed093cb22bb8f5acdc3
m2 hexdigest: 5eb63bbbe01eeed093cb22bb8f5acdc3
注:可以发现,只要数据一样(格式不同),则MD5码相同(即update()是以原来的基础继续生成MD5码,而不是新内容覆盖旧内容)。
只需更改构造函数即可使用不同的安全散列算法,其调用方式与上面的完全一样。
对于一次性数据,有中更精炼的写法,示例如下(其余算法一样):
md5 = hashlib.md5(b'hello world')
print(md5.hexdigest())
hashlib.new
(name[, data])-
是一个通用构造函数,它接受所需算法的字符串名称作为其第一个参数。它也存在允许访问上面列出的哈希以及您的OpenSSL库可能提供的任何其他算法。命名的构造函数比
new()
快得多,应该是首选。
使用OpenSSL提供的算法使用new()
:
h = hashlib.new('ripemd160')
h.update(b"hello world")
print(h.hexdigest())
python --- hashlib模块使用详解的更多相关文章
- python之模块datetime详解
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块datetime详解 import datetime #data=datetime.dat ...
- Python Deque 模块使用详解,python中yield的用法详解
Deque模块是Python标准库collections中的一项. 它提供了两端都可以操作的序列, 这意味着, 你可以在序列前后都执行添加或删除. https://blog.csdn.net/qq_3 ...
- python——pickle模块的详解
pickle模块详解 该pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议. “Pickling”是将Python对象层次结构转换为字节流的过程, “unpickling”是反 ...
- python datetime模块参数详解
Python提供了多个内置模块用于操作日期时间,像calendar,time,datetime.time模块,它提供 的接口与C标准库time.h基本一致.相比于time模块,datetime模块的接 ...
- python re模块findall()详解
今天写代码,在写到郑泽的时候遇到了一个坑,这个坑是re模块下的findall()函数. 下面我将结合代码,记录一下 import re string="abcdefg acbdgef abc ...
- python时间模块time详解
在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: ...
- Python: json模块实例详解
ref:https://www.jianshu.com/p/e29611244810 https://www.cnblogs.com/qq78292959/p/3467937.html https:/ ...
- python子进程模块subprocess详解与应用实例 之三
二.应用实例解析 2.1 subprocess模块的使用 1. subprocess.call >>> subprocess.call(["ls", " ...
- python子进程模块subprocess详解与应用实例 之一
subprocess--子进程管理器 一.subprocess 模块简介 subprocess最早是在2.4版本中引入的. subprocess模块用来生成子进程,并可以通过管道连接它们的输入/输出/ ...
随机推荐
- diff.js 列表对比算法 源码分析
diff.js列表对比算法 源码分析 npm上的代码可以查看 (https://www.npmjs.com/package/list-diff2) 源码如下: /** * * @param {Arra ...
- mac系统webstorm快捷键
WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.被广大中国JS开发者誉为"Web前端开发神器"."最强大的HTML5编辑器". ...
- 交换基本数据类型的方法swap,并影响到主方法
不知道朋友在哪里看到的问题,qq来问我,题目是:在不修改主方法的前提下使用一个方法交换两个int的值,方法如下: public static void main(String[] args) { In ...
- JDBC(一)之细说JDBC
Properties info = new Properties();//要参考数据库文档 info.setProperty("user", "root"); ...
- 在Centos7x上部署docker
docker只支持CentOS7.x系统,所以近期根据docker官网指南自己搭建了一套,供大家参考. 1.部署Centos7.x系统,查看系统版本. 2.执行 sudo yum update 更新到 ...
- NHibernte教程(10)--关联查询
本节内容 关联查询引入 一对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 关联查询引入 在NHibernate中提供了三种查询方式给我们选择:NH ...
- 如何将RDS的数据同步到本地自建数据库
长期以来有很多的用户咨询如何将RDS的数据同步到本地的数据库环境中,本篇文章以在阿里云的ECS服务器为例来说明如何将RDS的数据同步到本地数据库中.RDS对外提供服务是一个DNS地址+端口3306,这 ...
- 201521123035《Java程序设计》第三周学习总结
本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. 书面作业 1.代码 ...
- java课程设计--猜数字(团队博客)
java课程设计--猜数字(团队博客) 1.团队名称以及团队成员介绍 团队名称:cz 团队成员:陈伟泽,詹昌锦 团队照片: 2.项目git地址 http://git.oschina.net/Devil ...
- 201521123034《Java程序设计》第十一周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 多线程的冲突 互斥共享(有时两个或两个以上的线程需要同时对 而线程之间如果不加以控制,会产生一种情况-竞争) sy ...