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实现自动更换ip的方法
May 05 Python
python黑魔法之编码转换
Jan 25 Python
Python模块包中__init__.py文件功能分析
Jun 14 Python
Python的Flask框架标配模板引擎Jinja2的使用教程
Jul 12 Python
python3实现ftp服务功能(服务端 For Linux)
Mar 24 Python
Python Flask基础教程示例代码
Feb 07 Python
通过python实现弹窗广告拦截过程详解
Jul 10 Python
python实现几种归一化方法(Normalization Method)
Jul 31 Python
Python中的四种交换数值的方法解析
Nov 18 Python
python3实现elasticsearch批量更新数据
Dec 03 Python
Python之字典添加元素的几种方法
Sep 30 Python
python可视化分析绘制带趋势线的散点图和边缘直方图
Jun 25 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下载文件的详解
2013/06/02 PHP
php生成百度sitemap站点地图类函数实例
2014/10/17 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
YII框架常用技巧总结
2019/04/27 PHP
ASP中用Join和Array,可以加快字符连接速度的代码
2007/08/22 Javascript
jquery1.4后 jqDrag 拖动 不可用
2010/02/06 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
DOM操作一些常用的属性汇总
2015/03/13 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
2018/03/14 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
2019/01/30 Javascript
javascript实现简易的计算器
2020/01/17 Javascript
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
selenium+python截图不成功的解决方法
2019/01/30 Python
django项目中使用手机号登录的实例代码
2019/08/15 Python
Django视图扩展类知识点详解
2019/10/25 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
CSS3 box-sizing属性
2009/04/17 HTML / CSS
The Athlete’s Foot新西兰:新西兰最大的运动鞋零售商
2019/12/23 全球购物
前台文员个人求职信范文
2014/01/05 职场文书
优秀应届毕业生推荐信
2014/02/18 职场文书
总账会计岗位职责
2014/03/13 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
四风批评与自我批评范文
2014/10/14 职场文书
2014年班组工作总结
2014/11/20 职场文书
力克胡哲观后感
2015/06/10 职场文书
优质护理心得体会
2016/01/22 职场文书
SpringBoot 集成Redis 过程
2021/06/02 Redis
Spring Cache和EhCache实现缓存管理方式
2021/06/15 Java/Android
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技