哈希算法介绍来自https://blog.csdn.net/hulinku/article/details/78934329
★散列算法(哈希算法)
◇什么是”散列算法/哈希算法”?
这里所说的”散列”是一种计算机算法,洋文叫做 Hash,有时候也根据音译称为哈希。
散列算法可以把任意尺寸的数据(原始数据)转变为一个固定尺寸的”小”数据(叫”散列值”或”摘要”)。
◇摘要长度
对于某个具体的散列算法,得到的散列值长度总是固定的。散列值的长度又称”摘要长度”。
以下是常见散列算法的摘要长度
CRC32 32比特(4字节)
MD5 128比特(16字节)
SHA1 160比特(20字节)
◇散列算法的特色
1. 不可逆性
从刚才的描述看,散列似乎有点像压缩。其实捏,散列算法跟压缩算法是完全不同滴。压缩算法是可逆的(可以把压缩后的数据再还原),而散列算法是不可逆的。
还有一些人把散列算法称为”加密算法”,这也是不对的。因为加密算法是可逆的(”加密”的逆操作就是”解密”),而散列算法是不可逆的。
2. 确定性
通过某种散列算法,分别对两个原始数据计算散列值。如果算出来的散列值不同,那么可以 100% 肯定这两段数据是不同的——这就是”确定性”。
但反过来,如果这两段数据的散列值相同,则只能说,这两段数据非常可能相同。所谓的”非常可能”,就是说,还达不到百分百。具体原因,请看下一节”散列函数的可靠性”。
以下内容来自https://www.cnblogs.com/li134655/p/7687790.html
Python3中的hashlib模块提供了多个不同的安全哈希算法的通用接口
hashlib模块代替了Python2中的md5和sham模块,使用这个模块一般分为3步
1.创建一个哈希对象,使用哈希算法命名的构造函数或通用构造函数hashlib.new(name[, data])
2.使用哈希对象调用update()方法填充这个对象
3.调用digest() 或 hexdigest()方法来获取摘要(加密结果)
注:
1.update()方法需要接收的参数是一个字节对象(字节字符串,如:b"Hello,World!")
2.常用的一些算法主要有: SHA1, SHA224, SHA256, SHA384, SHA512, MD5等算法
3.SHA1算法比较早,是不能抵抗暴力破解的
hashlib模块提供一下常量属性
hashlib.algorithms_guaranteed
获取保证在所有平台上此模块支持的哈希算法名称的集合
hashlib.algorithms_available
获取可以运行在Python解释器中的哈希算法名称的集合
哈希对象常用的方法
h = hashlib.md5() 或 h = hashlib.new(“md5”) # md5可以替换为其他的哈希类型
h.update(arg)
将字节对象arg填充到哈希对象中,arg通常为要加密的字符串
h.digest()
返回加密结果,它是一个字节对象,长度为 h.digest_size,包含的字节范围 0 ~ 255
h.hexdigest()
返回加密结果,它是一个字符串对象,长度为 h.digest_size * 2,只包含16进制数字
read() 方法用于从文件读取指定的字节数,如果未给定或为负则读取所有。
import hashlib
try:
f = open(地址,‘rb’)
a = f.read()
finally:
if f:
f.close()
m = hashlib.md5()
m.update(a)
print(m.hexdigest())