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使用xauth方式登录饭否网然后发消息
Apr 11 Python
Python HTMLParser模块解析html获取url实例
Apr 08 Python
linux环境下python中MySQLdb模块的安装方法
Jun 16 Python
python 二分查找和快速排序实例详解
Oct 13 Python
python http接口自动化脚本详解
Jan 02 Python
详解【python】str与json类型转换
Apr 29 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
Python的垃圾回收机制详解
Aug 28 Python
Python传递参数的多种方式(小结)
Sep 18 Python
python pandas移动窗口函数rolling的用法
Feb 29 Python
Python字符串split及rsplit方法原理详解
Jun 29 Python
Python类绑定方法及非绑定方法实例解析
Oct 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脚本数据库功能详解(下)
2006/10/09 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
动态为事件添加js代码示例
2009/02/15 Javascript
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
AngularJS语法详解
2015/01/23 Javascript
JS实现类似百叶窗下拉菜单效果
2016/12/30 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
Vue自定义指令封装节流函数的方法示例
2018/07/09 Javascript
微信公众平台 客服接口发消息的实现代码(Java接口开发)
2019/04/17 Javascript
详解JavaScript中关于this指向的4种情况
2019/04/18 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
2019/07/10 jQuery
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
解决vuex刷新状态初始化的方法实现
2019/08/15 Javascript
详解Python中如何写控制台进度条的整理
2018/03/07 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
JavaScript中的模拟事件和自定义事件实例分析
2018/07/27 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
python生成随机红包的实例写法
2019/09/02 Python
pandas 对group进行聚合的例子
2019/12/27 Python
Python高并发解决方案实现过程详解
2020/07/31 Python
python定时截屏实现
2020/11/02 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
基于Python采集爬取微信公众号历史数据
2020/11/27 Python
利用css3径向渐变做一张优惠券的示例
2018/03/22 HTML / CSS
Chemist Warehouse官方海外旗舰店:澳洲第一连锁大药房
2017/08/25 全球购物
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
总经理岗位职责
2013/11/09 职场文书
实习单位鉴定评语
2014/04/26 职场文书
八年级作文之感恩
2019/11/22 职场文书
netty 实现tomcat的示例代码
2022/06/05 Servers