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采用raw_input读取输入值的方法
Aug 18 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
Jun 14 Python
Python抓取框架 Scrapy的架构
Aug 12 Python
python自动12306抢票软件实现代码
Feb 24 Python
python2.7+selenium2实现淘宝滑块自动认证功能
Feb 24 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
Apr 24 Python
Python 变量类型详解
Oct 10 Python
Python使用pydub库对mp3与wav格式进行互转的方法
Jan 10 Python
python字典改变value值方法总结
Jun 21 Python
python 实现目录复制的三种小结
Dec 04 Python
python打包生成so文件的实现
Oct 30 Python
Python实现查询剪贴板自动匹配信息的思路详解
Jul 09 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中str_replace函数使用小结
2008/10/11 PHP
PHP SOCKET编程详解
2015/05/22 PHP
php代码检查代理ip的有效性
2016/08/19 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
仿猪八戒网左下角的文字滚动效果
2011/10/28 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
js 控制下拉菜单刷新的方法
2013/03/03 Javascript
如何从jQuery的ajax请求中删除X-Requested-With
2013/12/11 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
源码分析Vue.js的监听实现教程
2017/04/23 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
vue  directive定义全局和局部指令及指令简写
2018/11/20 Javascript
[03:56]DOTA2完美大师赛趣味视频之小鸽子和Mineski打台球
2017/11/24 DOTA
跟老齐学Python之总结参数的传递
2014/10/10 Python
python类继承与子类实例初始化用法分析
2015/04/17 Python
图文详解Django使用Pycharm连接MySQL数据库
2019/08/09 Python
pip install python 快速安装模块的教程图解
2019/10/08 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
2020/08/11 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
LightInTheBox法国站:中国跨境电商
2020/03/05 全球购物
学校介绍信范文
2014/01/14 职场文书
外贸员简历中的自我评价
2014/03/04 职场文书
初中生庆国庆演讲稿范文2014
2014/09/25 职场文书
看上去很美观后感
2015/06/10 职场文书
《老人与海鸥》教学反思
2016/02/16 职场文书
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP
在Docker容器中部署SQL Server
2022/04/11 Servers