python3 Hash生成 检验文件完整性

python3 Hash生成 检验文件完整性

哈希算法介绍来自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模块

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进制数字

Python3 File read() 方法

read() 方法用于从文件读取指定的字节数,如果未给定或为负则读取所有。

部分代码

import hashlib
try:
f = open(地址,‘rb’)
a = f.read()
finally:
if f:
f.close()
m = hashlib.md5()
m.update(a)
print(m.hexdigest())

你可能感兴趣的:(python3 Hash生成 检验文件完整性)