Python内置模块hashlib、hmac与uuid用法分析


Posted in Python onFebruary 12, 2018

本文实例讲述了Python内置模块hashlib、hmac与uuid用法。分享给大家供大家参考,具体如下:

一、hashlib

md5和sha算法通过消息摘要算法生成定长的消息摘要,消息摘要算法是不可逆的。但同一段消息通过摘要算法后得到的值是一样的,可一通过比对消息摘要验证数据的完整性。

sha算法比MD5算法安全,但所需的时间也稍长。

1、原始消息摘要

import hashlib
# ######## md5 ########
hash = hashlib.md5()
hash.update('admin')
print hash.hexdigest()
#21232f297a57a5a743894a0e4a801fc3
# ######## sha1 ########
hash = hashlib.sha1()
hash.update('admin')
print hash.hexdigest(),len(hash.hexdigest())
# d033e22ae348aeb5660fc2140aec35850c4da997 40
# ######## sha256 ########
hash = hashlib.sha256()
hash.update('admin')
print hash.hexdigest(),len(hash.hexdigest())
# 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 64
# ######## sha384 ########
hash = hashlib.sha384()
hash.update('admin')
print hash.hexdigest(),len(hash.hexdigest())
# 9ca694a90285c034432c9550421b7b9dbd5c0f4b6673f05f6dbce58052ba20e4248041956ee8c9a2ec9f10290cdc0782 96
# ######## sha512 ########
hash = hashlib.sha512()
hash.update('admin')
print hash.hexdigest(),len(hash.hexdigest())
# c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec 128

2、加盐(salt)后摘要

由于同一个消息通过摘要算法得到的摘要是相同的,因此可以通过撞库的方式得到原始消息值。解决方式是,添加一个salt拼接原始消息后再进行计算。

import hashlib
# ######## md5 ########
hash = hashlib.md5('898oaFs09f')
hash.update('admin')
print hash.hexdigest()
#以上等价与
hash = hashlib.md5()
hash.update('898oaFs09fadmin')
print hash.hexdigest()

二、HMAC

HAMC它内部对我们创建 key 和 内容 再进行处理然后再加密,相当安全。一般用于挑战应答。

import hashlib
import hmac
h = hmac.new('keysstring')
h.update('hello')
print h.hexdigest(),len(h.hexdigest())
# 2ca7ac50a9bca542e58e0baad15f8383 32

三、UUID

UUID是128位的全局唯一标识符,通常由32字节的字符串表示。它可以保证时间和空间的唯一性,python中称为UUID,其他语言中可能称为GUID。

它通过MAC地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性。

UUID主要有五个算法,也就是五种方法来实现:

1、uuid1()——基于时间戳。由MAC地址、当前时间戳、随机数生成。可以保证全球范围内的唯一性,但MAC的使用同时带来安全性问题,局域网中可以使用IP来代替MAC。
2、uuid2()——基于分布式计算。环境DCE(Python中没有这个函数)算法与uuid1相同,不同的是把时间戳的前4位置换为POSIX的UID。实际中很少用到该方法。
3、uuid3()——基于名字的MD5散列值。通过计算名字和命名空间的MD5散列值得到,保证了同一命名空间中不同名字的唯一性,和不同命名空间的唯一性,但同一命名空间的同一名字生成相同的uuid。
4、uuid4()——基于随机数。由伪随机数得到,有一定的重复概率,该概率可以计算出来。
5、uuid5()——基于名字的SHA-1散列值。算法与uuid3相同,不同的是使用 SHA-1算法。

python中没有实现uuid2算法。

import uuid
print uuid.uuid1()
print uuid.uuid3(uuid.NAMESPACE_DNS, 'testme')
print uuid.uuid4()
print uuid.uuid5(uuid.NAMESPACE_DNS, 'testme')
# 1a52b39e-a197-11e6-b5c6-8056f2d4c814
# 7a67f5d4-50fd-36f7-bbeb-1c739ab40b8c
# 0c0cc4f0-6ad0-40d3-a796-119dcfaddf60
# dac48d1f-a443-578c-8754-856842a2f98d
Python 相关文章推荐
约瑟夫问题的Python和C++求解方法
Aug 20 Python
Python多层嵌套list的递归处理方法(推荐)
Jun 08 Python
Python实现快速排序算法及去重的快速排序的简单示例
Jun 26 Python
python爬取足球直播吧五大联赛积分榜
Jun 13 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
Feb 16 Python
PyQt5重写QComboBox的鼠标点击事件方法
Jun 25 Python
Python使用scrapy爬取阳光热线问政平台过程解析
Aug 14 Python
Python Django 添加首页尾页上一页下一页代码实例
Aug 21 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
Aug 23 Python
Python3基于print打印带颜色字符串
Jul 06 Python
Python学习之time模块的基本使用
Jan 17 Python
Python基础之数据结构详解
Apr 28 Python
20个常用Python运维库和模块
Feb 12 #Python
使用python实现BLAST
Feb 12 #Python
Python内置模块logging用法实例分析
Feb 12 #Python
Request的中断和ErrorHandler实例解析
Feb 12 #Python
Python实现Kmeans聚类算法
Jun 10 #Python
Python request设置HTTPS代理代码解析
Feb 12 #Python
python实现聚类算法原理
Feb 12 #Python
You might like
PHP中的string类型使用说明
2010/07/27 PHP
PHP函数strip_tags的一个bug浅析
2014/05/22 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
thinkPHP模板中函数的使用方法示例
2016/11/30 PHP
通过Jquery遍历Json的两种数据结构的实现代码
2011/01/19 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
For循环中分号隔开的3部分的执行顺序探讨
2014/05/27 Javascript
node.js中的fs.linkSync方法使用说明
2014/12/15 Javascript
Javascript Event(事件)的传播与冒泡
2017/01/23 Javascript
jquery实现焦点轮播效果
2017/02/23 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
javascript ES6 新增了let命令使用介绍
2017/07/07 Javascript
jquery插件开发之选项卡制作详解
2017/08/30 jQuery
JavaScript实现职责链模式概述
2018/01/25 Javascript
jQuery中each方法的使用详解
2018/03/18 jQuery
用ES6写全屏滚动插件的示例代码
2018/05/02 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
2020/03/04 Javascript
跟老齐学Python之关于类的初步认识
2014/10/11 Python
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
Python线程指南详细介绍
2017/01/05 Python
利用Python脚本实现ping百度和google的方法
2017/01/24 Python
python编程线性回归代码示例
2017/12/07 Python
matplotlib设置legend图例代码示例
2017/12/19 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
Python 实现数据结构-堆栈和队列的操作方法
2019/07/17 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
python数据类型强制转换实例详解
2020/06/22 Python
关于责任的演讲稿
2014/05/20 职场文书
创先争优活动心得体会
2014/09/04 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python