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操作Mysql实例代码教程在线版(查询手册)
Feb 18 Python
Python中请使用isinstance()判断变量类型
Aug 25 Python
python实现给字典添加条目的方法
Sep 25 Python
零基础写python爬虫之爬虫编写全记录
Nov 06 Python
python调用Matplotlib绘制分布点并且添加标签
May 31 Python
pandas求两个表格不相交的集合方法
Dec 08 Python
Python实现操纵控制windows注册表的方法分析
May 24 Python
python多线程并发实例及其优化
Jun 27 Python
postman传递当前时间戳实例详解
Sep 14 Python
Python利用FFT进行简单滤波的实现
Feb 26 Python
使用Keras构造简单的CNN网络实例
Jun 29 Python
浅谈Django前端后端值传递问题
Jul 15 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+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
ThinkPHP3.2.3实现分页的方法详解
2016/06/03 PHP
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
Javascript 错误处理的几种方法
2009/06/13 Javascript
javascript 读取XML数据,在页面中展现、编辑、保存的实现
2009/10/27 Javascript
读jQuery之四(优雅的迭代)
2011/06/20 Javascript
JS鼠标事件大全 推荐收藏
2011/11/01 Javascript
js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
2016/01/19 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
2017/05/22 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
Element-ui中元素滚动时el-option超出元素区域的问题
2019/05/30 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
小程序调用微信支付的方法
2019/09/26 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
antd多选下拉框一行展示的实现方式
2020/10/31 Javascript
详解vue-router的导航钩子(导航守卫)
2020/11/02 Javascript
Python实现单词拼写检查
2015/04/25 Python
用C++封装MySQL的API的教程
2015/05/06 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
2017/11/24 Python
python 请求服务器的实现代码(http请求和https请求)
2018/05/25 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
常用的10个Python实用小技巧
2020/08/10 Python
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
职业生涯规划书基本格式
2014/01/06 职场文书
电工工作职责范本
2014/02/22 职场文书
我们的节日端午节活动方案
2014/03/02 职场文书
信息技术培训感言
2014/03/06 职场文书
教学质量评估实施方案
2014/03/17 职场文书
《欢乐的泼水节》教学反思
2014/04/22 职场文书
旷课检讨书500字
2014/10/14 职场文书
个人存款证明书
2014/10/18 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫
golang生成vcf通讯录格式文件详情
2022/03/25 Golang