hashlib简介
密码学是一个庞大的领域,总体来说可将该领域中的加密方式分为2大类:
- 对称加密:可通过加密值反解出内容
- 非对称加密:不可通过加密值反解出内容
而今天介绍的hashlib模块是Python3中所独有的,提供了一系列的非对称加密算法:hash算法。
在Python2中hashlib模块被拆分成了md5模块和sha模块,它们提供的功能和Python3的hashlib模块相同。
以下是该模块提供的部分常用方法及属性:
属性/方法 | 描述 |
---|---|
hashlib.algorithms_guaranteed | 以集合方式,列出所有平台所支持的hash算法 |
hashlib.algorithms_available | 以集合方式,列出当前所运行的Python解释器所支持的hash算法 |
hash.digest_size | 以字节表示结果hash对象的大小 |
hash.block_size | 以字节表示的hash算法的内部块大小 |
hash.name | 返回hash对象的规范名称 |
hash.copy() | 返回hash对象的拷贝副本 |
hash.update() | 在已有基础上对hash对象的内容进行更新 |
hash.hexdigest() | 返回16进制的字符串hash值 |
hash.digest() | 返回2进制的字节串hash值 |
hash特性
Python的字典在键值对数据存储和读取时,就用到了hash算法。
比如:“k1” : "v1"的键值对在存储过程中,"k1"会通过hash()函数得出1个hash值,该hash值与v1一一对应,后续通过dict.get()方法通过"k1"找"v1"时,内部也是利用的这个hash值来进行查找。
通过字典的种种特性,我们可以顺势推导出hash的一些特性:
- 相同的内容求hash值,得到的hash结果也必然相同
- 不能通过hash值反解出内容(或者说反解的代价大到不可能实现,但也不是绝对的)
- 如果采用相同的hash算法,无论需要校验的内容由多大,得到的hash值长度总是固定的
我们使用内置的hash()函数来验证这3点结论:
1