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制作在地图上模拟瘟疫扩散的Gif图
Mar 31 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 Python
python 远程统计文件代码分享
May 14 Python
Python中字典的基本知识初步介绍
May 21 Python
教你用Python脚本快速为iOS10生成图标和截屏
Sep 22 Python
python多进程并行代码实例
Sep 30 Python
python装饰器练习题及答案
Nov 01 Python
django 实现简单的插入视频
Apr 07 Python
Python数据正态性检验实现过程
Apr 18 Python
python如何导入依赖包
Jul 13 Python
用pushplus+python监控亚马逊到货动态推送微信
Jan 29 Python
浅谈Python 中的复数问题
May 19 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 截取字符串 分别适合GB2312和UTF8编码情况
2009/02/12 PHP
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
Yii实现MySQL多数据库和读写分离实例分析
2014/12/03 PHP
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
网页整体变灰白色(兼容各浏览器)实例
2013/04/21 Javascript
js简易namespace管理器 实例代码
2013/06/21 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
vue-cli3 DllPlugin 提取公用库的方法
2019/04/24 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
寻找网站后台地址的python脚本
2014/09/01 Python
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
Python Sphinx使用实例及问题解决
2020/01/17 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
美国著名珠宝品牌之一:Jared The Galleria Of Jewelry
2016/10/01 全球购物
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
幼儿园教师培训制度
2014/01/16 职场文书
十岁生日同学答谢词
2014/01/19 职场文书
幼师求职自荐信范文
2014/01/26 职场文书
工地安全生产标语
2014/06/06 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
中学生逃课检讨书
2015/02/17 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
结婚仪式主持词
2015/06/29 职场文书
解除合同协议书范本
2016/03/21 职场文书