Python Hashlib笔记
#python3.4
hashlib module - A common interface to many hash functions.
hash.digest() - Return the digest of the data passed to the update() method so far. This is a bytes object of size digest_size which may contain bytes in the whole range from 0 to 255.
hash.hexdigest() - Like digest() except the digest is returned as a string object of double length, containing only hexadecimal digits. This may be used to exchange the value safely in email or other non-binary environments.
注1:python 3 由于默认是 Unicode
因此 update(arg) 中的 arg如果是字符串时,需要用b开头,例如 b"hello world!!"。
注2:digest 和 hexdigest 的区别
MD5为例,及校验和为128bit数据,对应16Byte 数据。但这个16Byte无法用ASCII直接表示(存储、通信等)。
因此 使用 hexdigest 将 128bit分为 32个4bit数据,4bit数据用hex(0~9,A~F)的ASCII表示。这样对很多通信协议就好用了,也风方便 人来阅读及比较。
举例:
>>>import hashlib
>>>hashlib.md5(b"hello").digest()
b']A@*\xbcK*v\xb9q\x9d\x91\x10\x17\xc5\x92'
>>>hashlib.md5(b"hello").hexdigest()
'5d41402abc4b2a76b9719d911017c592'
1、将 hexdigest拆分如下:
5d 41 40 2a bc 4b 2a 76 b9 71 9d 91 10 17 c5 92
2、每2为hex转换为 hex( 其中 大于0x80的无法转换,0x0~0x7F中有些也需要转移。可得
b ' ] A @ * \xbc K * v \xb9 q \x9d \x91 \x10 \x17 \xc5 \x92。 和 digest( 就对起来了)。
注3:HASH主要函数
MD5 -- 128bit,SHA-1 -- 160bit, SHA-256 -- 256bit, SHA-512 -- 512bit;
python 3.6开始 支持 SHA3相关算法。
>>> hashlib.md5(b"").hexdigest()
md5= d41d8cd98f00b204e9800998ecf8427e
>>> hashlib.sha1(b"").hexdigest()
sha1= da39a3ee5e6b4b0d3255bfef95601890afd80709
>>> hashlib.sha256(b"").hexdigest()
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
>>> hashlib.sha512(b"").hexdigest()
cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e
============== 备注
A、Windows下校验 文件 hash值 ( MD5,SHA1,SHA256,SHA512 必须是大写):
certutil -hashfile filename.ext MD5
certutil -hashfile filename.ext SHA1
certutil -hashfile filename.ext SHA256
B、Linux下校验 文件hash值:
参见:《【笔记】shell下的主要工具》 中
md5sum,sha1sum,sha256sum 等命令
Python Hashlib笔记的更多相关文章
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- Python学习笔记(十一)
Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...
- Python学习笔记六
Python课堂笔记六 常用模块已经可以在单位实际项目中使用,可以实现运维自动化.无需手工备份文件,数据库,拷贝,压缩. 常用模块 time模块 time.time time.localtime ti ...
- Python学习笔记,day5
Python学习笔记,day5 一.time & datetime模块 import本质为将要导入的模块,先解释一遍 #_*_coding:utf-8_*_ __author__ = 'Ale ...
- Web Scraping with Python读书笔记及思考
Web Scraping with Python读书笔记 标签(空格分隔): web scraping ,python 做数据抓取一定一定要明确:抓取\解析数据不是目的,目的是对数据的利用 一般的数据 ...
- python学习笔记整理——字典
python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...
- VS2013中Python学习笔记[Django Web的第一个网页]
前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...
- python学习笔记之module && package
个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...
- python datetime笔记
python datetime笔记 http://mint-green.diandian.com/post/2011-09-09/4892024 获取当前时间,并通过字符串输出. 格式为:%Y-%m- ...
随机推荐
- FMDB存储模型对象(以二进制存储)用NSKeyedArchiver archivedDataWithRootObject序列号,NSKeyedUnarchiver unarchiveObjectWithData反序列化(重点坑是sql语句@"insert into t_newsWithChannel (nwesName,newsType) values (?,?)")一定要用占位符
交友:微信号 dwjluck2013 一.封装FMDB单例 (1)JLFMDBHelp.h文件 #import <Foundation/Foundation.h> #import < ...
- 基于.net core微服务(Consul、Ocelot、Docker、App.Metrics+InfluxDB+Grafana、Exceptionless、数据一致性、Jenkins)
1.微服务简介 一种架构模式,提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(RESTfu ...
- myBati初学
创建数据库(y2165) MyBatis环境搭建1.在pom.xml引入依赖2.得替换build节点,为了让程序编译在main中所有子包下的配置文件3.构建大配置,位于resources<?xm ...
- kafka基础四
消费者消费过程(二) 消费组状态机:消息的产生存储消费看似是杂乱无章的,但万物都会遵循一定的规则成长,任何事物的发展都是有迹可循的. 开始消费组初始状态为Stable,经过第一次Rebalance之后 ...
- .NET Core 1.0 CentOS7 尝试(三、使用VSCode创建一个Web应用)
参考地址:https://docs.asp.net/en/latest/tutorials/your-first-mac-aspnet.html 一.使用VSCode创建一个目录FirstWebApp ...
- 能挣钱的微信JSSDK+H5混合开发
H5喊了那么久,有些人都说不实用,有些人却利用在微信中开发H5应用赚得盆满钵满.微信JSSDK + HTML 5,让移动Web开发与微信结合轻而易举!跨平台.零成本,让大众创业变得更方便. 我觉得现在 ...
- Java类的静态块の二
在上一篇Java类的静态块の一中介绍到:类的静态块在类加载时候执行,执行早于构造函数,并且只执行一次. 但是在下面的例子中却发现JVM并不是把把所有的static模块都执行完成再执行其他(Java果然 ...
- listView onItemClick失效
1.先检查list是否设置监听onItemClick事件 2.ListView中有按钮时,会使子项的onItemClick事件无效,如果onItemClick不能触发,在ListView子项目布局文件 ...
- 源文件名长度大于系统支持的长度,无法删除,java主方法执行方式删除
import java.io.File; /** * @author 海盗船长 * 2017年2月14日11:24:26 */ public class DeleteFiles { public st ...
- Jenkins结合ant传递参数
需求: 使用Jenkins的「参数化构建过程」,由用户手动输入参数.通过ant脚本接收这个参数,并输出(当然,中间也可以进行复杂的处理,这里为了说明问题,仅做简单的输出). 1.基础环境 Jenkin ...