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获取网页上图片下载地址的方法
Mar 11 Python
对python中的for循环和range内置函数详解
Apr 17 Python
vue.js实现输入框输入值内容实时响应变化示例
Jul 07 Python
python微信公众号之关注公众号自动回复
Oct 25 Python
python+flask实现API的方法
Nov 21 Python
flask session组件的使用示例
Dec 25 Python
Python使用Shelve保存对象方法总结
Jan 28 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
Apr 04 Python
在python里面运用多继承方法详解
Jul 01 Python
Python使用sklearn库实现的各种分类算法简单应用小结
Jul 04 Python
高考考python编程是真的吗
Jul 20 Python
Python extract及contains方法代码实例
Sep 11 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
初学CAKEPHP 基础教程
2009/11/02 PHP
PHP基本语法实例总结
2016/09/09 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
2006/12/06 Javascript
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
jQuery处理xml格式的返回数据(实例解析)
2013/11/28 Javascript
jQuery中:has选择器用法实例
2014/12/30 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
jQuery Ajax请求后台数据并在前台接收
2016/12/10 Javascript
利用Node.js编写跨平台的spawn语句详解
2017/02/12 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
Linux CentOS系统下安装node.js与express的方法
2017/04/01 Javascript
Bootstrap 树控件使用经验分享(图文解说)
2017/11/06 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
2018/01/03 Javascript
js+css实现打字效果
2020/06/24 Javascript
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
JavaScript编码小技巧分享
2020/09/17 Javascript
微信小程序实现简单购物车功能
2020/12/30 Javascript
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
python中将字典转换成其json字符串
2014/07/16 Python
Python遍历zip文件输出名称时出现乱码问题的解决方法
2015/04/08 Python
详解Python中 sys.argv[]的用法简明解释
2017/12/20 Python
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
Pycharm连接远程服务器并实现远程调试的实现
2019/08/02 Python
Python的Lambda函数用法详解
2019/09/03 Python
Python脚本操作Excel实现批量替换功能
2019/11/20 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
详解Python yaml模块
2020/09/23 Python
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
拔河比赛口号
2014/06/10 职场文书
幼儿园家长工作总结2015
2015/04/25 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
家庭经济困难证明
2015/06/23 职场文书