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入门篇之条件、循环
Oct 17 Python
python3.5仿微软计算器程序
Mar 30 Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
python基础教程项目三之万能的XML
Apr 02 Python
Python实现判断并移除列表指定位置元素的方法
Apr 13 Python
Python运维之获取系统CPU信息的实现方法
Jun 11 Python
pytorch训练imagenet分类的方法
Jul 27 Python
利用python求积分的实例
Jul 03 Python
python3 线性回归验证方法
Jul 09 Python
Pytorch to(device)用法
Jan 08 Python
Python气泡提示与标签的实现
Apr 01 Python
Django 5种类型Session使用方法解析
Apr 29 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下获取客户端ip地址的函数
2010/03/15 PHP
php printf输出格式使用说明
2010/12/05 PHP
MySQL时间字段究竟使用INT还是DateTime的说明
2012/02/27 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
通过隐藏option实现select的联动效果
2009/11/10 Javascript
javascript 自动填写表单的实现方法
2010/04/09 Javascript
js 删除数组的几种方法小结
2014/02/21 Javascript
button没写type=button会导致点击时提交
2014/03/06 Javascript
JavaScript识别网页关键字并进行描红的方法
2015/11/09 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
微信小程序开发教程之增加mixin扩展
2017/08/09 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
解决$store.getters调用不执行的问题
2019/11/08 Javascript
vue v-model的用法解析
2020/10/19 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
Linux下为不同版本python安装第三方库
2016/08/31 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
softmax及python实现过程解析
2019/09/30 Python
Python 抓取数据存储到Redis中的操作
2020/07/16 Python
Python logging自定义字段输出及打印颜色
2020/11/30 Python
python复合条件下的字典排序
2020/12/18 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
Boom手表官网:瑞典手表品牌,设计你的手表
2019/03/11 全球购物
一套VC试题
2015/01/23 面试题
青年志愿者活动总结
2014/04/26 职场文书
司法工作人员群众路线对照检查材料思想汇报
2014/09/30 职场文书
小学见习报告
2014/10/31 职场文书
Python3.8官网文档之类的基础语法阅读
2021/09/04 Python
MySQL数据库 安全管理
2022/05/06 MySQL