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的Flask框架中实现全文搜索功能
Apr 20 Python
Python django实现简单的邮件系统发送邮件功能
Jul 14 Python
使用Python操作excel文件的实例代码
Oct 15 Python
在Python程序员面试中被问的最多的10道题
Dec 05 Python
python贪婪匹配以及多行匹配的实例讲解
Apr 19 Python
python获取当前目录路径和上级路径的实例
Apr 26 Python
Python模拟百度自动输入搜索功能的实例
Feb 14 Python
Python 函数用法简单示例【定义、参数、返回值、函数嵌套】
Sep 20 Python
浅谈Python类中的self到底是干啥的
Nov 11 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
Mar 10 Python
Python request操作步骤及代码实例
Apr 13 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 date与gmdate的获取日期的区别
2010/02/08 PHP
php实现插入排序
2015/03/29 PHP
PHP面向对象程序设计实例分析
2016/01/26 PHP
firefox火狐浏览器与与ie兼容的2个问题总结
2010/07/20 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
妙用Jquery的val()方法
2012/06/27 Javascript
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
extjs render 用法介绍
2013/09/11 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
canvas 弹幕效果(实例分享)
2017/01/11 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
js+canvas实现验证码功能
2020/09/21 Javascript
让mocha支持ES6模块的方法实现
2020/01/14 Javascript
vue实现列表滚动的过渡动画
2020/06/29 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
Python迭代用法实例教程
2014/09/08 Python
详解Python中break语句的用法
2015/05/14 Python
Python使用tablib生成excel文件的简单实现方法
2016/03/16 Python
python使用标准库根据进程名如何获取进程的pid详解
2017/10/31 Python
python机器学习实战之树回归详解
2017/12/20 Python
python多进程中的内存复制(实例讲解)
2018/01/05 Python
从DataFrame中提取出Series或DataFrame对象的方法
2018/11/10 Python
python石头剪刀布小游戏(三局两胜制)
2021/01/20 Python
python多进程并行代码实例
2019/09/30 Python
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
Molly Bracken法国电子商店:法国女性时尚品牌
2019/07/24 全球购物
保加利亚服装和鞋类购物网站:Bibloo.bg
2020/11/08 全球购物
英语师范专业毕业生自荐信
2013/09/21 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
自愿离婚协议书范本
2015/01/26 职场文书
员工表扬信怎么写
2015/05/05 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书
Python 中的单分派泛函数你真的了解吗
2021/06/22 Python