Python3 教程:加密模块 - hashlib
一、哈希
1. 什么是可哈希(hashable)
简要的说,可哈希的数据类型,即不可变的数据结构(字符串str、元组tuple、对象集objects)。
2. 哈希有什么作用
它是一个将大体量数据转化为很小数据的过程,甚至可以仅仅是一个数字,以便我们可以用在固定的时间复杂度下查询它,所以,哈希对高效的算法和数据结构很重要。
3. 什么是不可哈希(unhashable)
同理,不可哈希的数据类型,即可变的数据结构 (字典dict,列表list,集合set)。
4. hash(object)
hash() 用于获取取一个对象(字符串或者数值等)的哈希值。返回对象的哈希值。
二、HASH(散列函数)
1. 简介
哈希(hash)也翻译作散列。Hash算法,是将一个不定长的输入,通过散列函数变换成一个定长的输出,即散列值。
这种散列变换是一种单向运算,具有不可逆性即不能根据散列值还原出输入信息,因此严格意义上讲Hash算法是一种消息摘要算法,不是一种加密算法。常见的hash算法有:SM3、MD5、SHA-1等 。
2. 应用
Hash主要应用在数据结构以及密码学领域。
在不同的应用场景下,hash函数的选择也会有所侧重。比如在管理数据结构时,主要要考虑运算的快速性,并且要保证hash均匀分布;而应用在密码学中就要优先考虑抗碰撞性,避免出现两段不同明文hash值相同的情况发生。
2.1 在密码学领域的应用
在密码学中,Hash算法的作用主要是用于消息摘要和签名,换句话说,它主要用于对整个消息的完整性进行校验。比如一些登陆网站并不会直接明文存储用户密码,存储的是经过hash处理的密码的摘要(hash值),当用户登录时只需要对比输入明文的摘要与数据库存储的摘要是否相同;即使黑客入侵或者维护人员访问数据库也无法获取用户的密码明文,大大提高了安全性。
2.2 在数据结构中的应用
使用Hash算法的数据结构叫做哈希表,也叫散列表,主要是为了提高查询的效率。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数就是hash函数,存放记录的数组叫做哈希表。在数据结构中应用时,有时需要较高的运算速度而弱化考虑抗碰撞性,可以使用自己构建的哈希函数。
3. hash()
①相同的数值,不同的类型,哈希值相同
②相同字符串在同一次运行时的哈希值是相同的,但是不同次运行的哈希值不同
这是由于Python的字符串hash算法有一个启动时随机生成secret prefix/suffix的机制,存在随机化现象:对同一个字符串输入,不同解释器进程得到的hash结果可能不同。因此当需要做可重现可跨进程保持一致性的hash,需要用到hashlib模块。
三、hashlib模块
hashlib提供了常见的摘要算法,如MD5,SHA1等等
注:coding:utf-8
上一篇: python 学习 Day19 1. 生成随机数 random, 2. 序列化 [json, pick, shelve], 3. 加密 [hashlib, hmac] 4. 文件操作 [shutil
推荐阅读
-
库存 Python 加密解密模块 hashlib 7 种加密算法 - 前言
-
Python3 加密(hashlib 和 hmac)模块实现
-
Python 的 hashlib 模块说明、另一个案例和计算文件哈希算法--加密哈希函数用例
-
使用 python hashlib 模块加密明文字符串,以及如何破解密码而使库崩溃
-
python 基础教程:Hashlib 模块使用教程
-
python3 加密模块的实现(hashlib、hmac)
-
测试开发] Python 教程系列:Hashlib 模块
-
Python 的 hashlib 模块:深入 7 种加密算法
-
在 Python hashlib 模块中进行 sha 加密
-
Python3 教程:加密模块 - hashlib