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的Tornado框架对子域名和泛域名的支持
May 02 Python
python动态性强类型用法实例
May 09 Python
使用Python进行二进制文件读写的简单方法(推荐)
Sep 12 Python
Python学习小技巧之列表项的排序
May 20 Python
Mac中Python 3环境下安装scrapy的方法教程
Oct 26 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
Dec 05 Python
解决Python内层for循环如何break出外层的循环的问题
Jun 24 Python
对Python中一维向量和一维向量转置相乘的方法详解
Aug 26 Python
python解析xml文件方式(解析、更新、写入)
Mar 05 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
Jun 11 Python
python爬虫智能翻页批量下载文件的实例详解
Feb 02 Python
分享Python获取本机IP地址的几种方法
Mar 17 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 进度条实现代码
2009/03/10 PHP
PHP中对用户身份认证实现两种方法
2011/06/04 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
2013/04/26 PHP
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
php实现求相对时间函数
2015/06/15 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
JavaScript延迟加载
2021/03/09 Javascript
google地图的路线实现代码
2009/08/20 Javascript
Javascript 匿名函数及其代码模式原理
2010/03/19 Javascript
js 强制弹出窗口代码研究-又一款代码
2010/03/20 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
javascript ajax的5种状态介绍
2014/08/18 Javascript
jQuery中noconflict函数的实现原理分解
2015/02/03 Javascript
js+html5操作sqlite数据库的方法
2016/02/02 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
0基础学习前端开发的一些建议
2020/07/14 Javascript
angular共享依赖的解决方案分享
2020/10/15 Javascript
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python和ruby,我选谁?
2017/09/13 Python
Python实现的栈、队列、文件目录遍历操作示例
2019/05/06 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
学python安装的软件总结
2019/10/12 Python
python 中值滤波,椒盐去噪,图片增强实例
2019/12/18 Python
python能在浏览器能运行吗
2020/06/17 Python
Python基于gevent实现文件字符串查找器
2020/08/11 Python
土耳其时尚潮流在线购物网站:Trendyol
2017/10/10 全球购物
全球性的在线鞋类品牌:Public Desire
2019/04/03 全球购物
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
护理专科自荐书范文
2014/02/18 职场文书
赔偿协议书范本
2014/04/15 职场文书
南湾猴岛导游词
2015/02/09 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
Docker安装MySql8并远程访问的实现
2022/07/07 Servers