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中set常用操作汇总
Jun 30 Python
python字典键值对的添加和遍历方法
Sep 11 Python
windows下ipython的安装与使用详解
Oct 20 Python
python利用正则表达式提取字符串
Dec 08 Python
利用Python实现Windows下的鼠标键盘模拟的实例代码
Jul 13 Python
Sublime开发python程序的示例代码
Jan 24 Python
Python操作word常见方法示例【win32com与docx模块】
Jul 17 Python
Python socket模块实现的udp通信功能示例
Apr 10 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
Apr 25 Python
根据tensor的名字获取变量的值方式
Jan 04 Python
解决python3中os.popen()出错的问题
Nov 19 Python
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
Jun 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
德生PL330测评
2021/03/02 无线电
php递归创建和删除文件夹的代码小结
2012/04/13 PHP
php生成mysql的数据字典
2016/07/07 PHP
PHP 对象继承原理与简单用法示例
2020/04/21 PHP
PHP7修改的函数
2021/03/09 PHP
一种JavaScript的设计模式
2006/11/22 Javascript
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
JQuery限制复选框checkbox可选中个数的方法
2015/04/20 Javascript
如何用javascript计算文本框还能输入多少个字符
2015/07/29 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
Javascript动画效果(3)
2016/10/11 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
Element-ui tree组件自定义节点使用方法代码详解
2018/09/17 Javascript
jquery将json转为数据字典的实例代码
2019/10/11 jQuery
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
2020/09/10 Javascript
python获取beautifulphoto随机某图片代码实例
2013/12/18 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
python实现zabbix发送短信脚本
2018/09/17 Python
python 多线程将大文件分开下载后在合并的实例
2018/11/09 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
Python json模块与jsonpath模块区别详解
2020/03/05 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
2020/07/03 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
python json.dumps() json.dump()的区别详解
2020/07/14 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
Nixon手表英国官网:美国尼克松手表品牌
2020/02/10 全球购物
2014学校领导四风对照检查材料思想汇报
2014/09/23 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL