[python]hash-文件完整性效验

import hashlib
def file_hash(file_path):
    """计算文件的MD5哈希值"""
    sha256 = hashlib.md5()
    with open(file_path, 'rb') as f:
        while True:
            data = f.read(1024)
            if not data:
                break
            sha256.update(data)
    return sha256.hexdigest()
result=file_hash(r'D:\pycharm-Work\web_study\py_25day_project\Ademo\草稿本.py')
print(result)

按1024字节读取文件来计算文件的MD5哈希值;

也可以通过文件大小来分段读取文件,再计算文件MD5哈希值;

两种计算文件大小的方式:

# 1.通过getsize获取文件大小
import os
file=r'D:\pycharm-Work\web_study\py_25day_project\Ademo\草稿本.py'
res=os.path.getsize(file)
print(res)

# 2.通过seek()获取文件大小
with open(file,mode='rb') as f:
    t=f.seek(0,2)
    print(t)

通过getsize获取文件大小,分成10段进行读取文件,再计算文件MD5哈希值

import os
import hashlib
def file_hash(file_path):
    """计算文件的MD5哈希值"""
    sha256 = hashlib.md5()
    with open(file_path, 'rb') as f:
        file_size = os.path.getsize(file_path)
        # 每次读取的块大小为文件大小的1/10
        block_size = file_size // 10
        while True:
            data = f.read(block_size)
            if not data:
                break
            sha256.update(data)
    return sha256.hexdigest()

result=file_hash(r'D:\pycharm-Work\web_study\py_25day_project\Ademo\草稿本.py')
print(result)

需要注意的是:按照不同的块大小读取文件,可能会对哈希值产生影响。以按 1024 字节读取文件和按 1/10 文件大小读取文件为例,假设文件大小为 10000 字节,那么按照这两种方式读取的块大小分别为 1024 字节和 1000 字节。这样,按照不同的方式读取的块数就不同,可能导致最后计算哈希值时,读入的数据不同,从而导致哈希值不同。  因此,在实际应用中,可以根据文件大小和系统资源等因素,选择一个合适的块大小,来确保计算哈希值时保持一致。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值