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 相关文章推荐
Python3基础之基本数据类型概述
Aug 13 Python
Python多线程编程简单介绍
Apr 13 Python
Python命令行参数解析模块optparse使用实例
Apr 13 Python
在Python中操作字符串之rstrip()方法的使用
May 19 Python
详解Python设计模式编程中观察者模式与策略模式的运用
Mar 02 Python
利用Python抓取行政区划码的方法
Nov 28 Python
Python调用C语言的实现
Jul 26 Python
使用pyqt 实现重复打开多个相同界面
Dec 13 Python
python语言的优势是什么
Jun 17 Python
学生如何注册Pycharm专业版以及pycharm的安装
Sep 24 Python
AI:如何训练机器学习的模型
Apr 16 Python
python周期任务调度工具Schedule使用详解
Nov 23 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
PHILIPS D1835/D1875的电路分析与打理
2021/03/02 无线电
PHP用户指南-cookies部分
2006/10/09 PHP
PHP添加MySQL数据记录代码
2008/06/07 PHP
php 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
php使用websocket示例详解
2014/03/12 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
js仿百度切换皮肤功能(html+css)
2016/07/10 Javascript
jquery dataview数据视图插件使用方法
2016/12/23 Javascript
JavaScript获取当前时间向前推三个月的方法示例
2017/02/04 Javascript
ionic2自定义cordova插件开发以及使用(Android)
2017/06/19 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
Vue实现浏览器打印功能的代码
2020/04/17 Javascript
微信小程序实现canvas分享朋友圈海报
2020/06/21 Javascript
对vuex中store和$store的区别说明
2020/07/24 Javascript
Vue 构造选项 - 进阶使用说明
2020/08/14 Javascript
python 切片和range()用法说明
2013/03/24 Python
python在linux中输出带颜色的文字的方法
2014/06/19 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
2016/01/20 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
Python字典实现简单的三级菜单(实例讲解)
2017/07/31 Python
python中将字典形式的数据循环插入Excel
2018/01/16 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
华为C++笔试题
2014/08/05 面试题
护士专业推荐信
2013/11/02 职场文书
环境工程专业毕业生求职信
2014/09/30 职场文书
自主招生自荐信范文
2015/03/04 职场文书
2019已经过半,你知道年中工作总结该怎么写吗?
2019/07/03 职场文书
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android