python hash()和hashlib
一、哈希算法
哈希算法:哈希算法并不是特定的算法而是一类算法的统称,只要是完成这种功能的算法都是哈希算法,哈希算法也叫做散列算法。同时这个过程是不可逆的,无法由key推导出data。判断一个哈希算法是否优秀,要根据算法的离散度和冲突概率来评定。
哈希函数:就是你给我一个值,我就能通过这个函数计算出它的存储地址。然后取出对应的值,不需要遍历查找,只要计算出地址,需要查询的值就找到了。
哈希表:又称散列表,其定义是根据一个哈希函数将集合S中的关键字映射到一个表中,这个表就称为哈希表,而这种方法就称为Hashing。
二、hashlib
2.1什么是摘要算法
摘要算法:不需要密钥,并且加密后无法破解,只有输入相同的明文,采用相同的摘要算法,才能得到相同的密文。无论明文有多长,经过摘要算法加密后密文的长度是固定的。
1.加密后不可逆 2..无法破解 3.相同的摘要算法和明文,得到的密文永远相同
hashlib模块实现了一个通用的接口来实现多个不同的安全哈希和消息摘要算法,包括FIPS安全散列算法SHA1,SHA224,SHA256,SHA384和SHA512(在FIPS 180-2中定义)以及RSA的MD5算法(在因特网中术语“安全散列”和“消息摘要”是可互换的。较旧的算法被称为消息摘要。现代术语是安全哈希。
每种类型的哈希都具有一个命名构造函数。它们都返回一个具有相同的简单接口的哈希对象。例如:使用sha1()
创建SHA1哈希对象。现在,你可以使用update()
方法以类字节对象填充这个对象(通常为字节)。在连接数据的任何时候,你都可以使用digest()
或hexdigest()
方法来向它请求摘要。
此模块中始终存在的散列算法的构造函数为md5()
,sha1()
,sha224()
,sha256()
,sha384()
和sha512()
。可能还有其它算法,这取决于在你的平台上Python 使用的 OpenSSL 库。
2.2摘要算法的作用
1.下载文件时,一些文件校验值,判断文件是否一致。
2.用于分布式网络上使用,保证多台服务器的文件一致。
2.2摘要算法示例
获取b'HelloWorld'的消息摘要
import hashlib #1.得到MD5对象 md5_obj = hashlib.md5() #update(arg) 将arg变为哈希对象 md5_obj.update(b'HelloWold') #返回哈希结果的大小。以字节为单位 print(md5_obj.digest_size) #返回传递给update()方法数据的摘要 print(md5_obj.digest()) #摘要以2倍长度的字符串对象返回,生成一个只包含十六进制数字 字符串 print(md5_obj.hexdigest())#e22973461674c5b0f771b9ea4f6c6222
md5.update():多次调用等效于具有多个参数串联的单个调用。
import hashlib md5_obj = hashlib.md5() #多次调用update()等效于 具有多个参数串联的单个调用 md5_obj.update(b'Hello') md5_obj.update(b'World') print(md5_obj.hexdigest()) #68e109f0f40ca72a15e05cc22786f8e6 md5_obj1 = hashlib.md5() md5_obj1.update(b'HelloWorld') print(md5_obj1.hexdigest()) #68e109f0f40ca72a15e05cc22786f8e6