You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python计算文件MD5哈希并与txt导入的恶意哈希值比对

Python MD5哈希校验脚本实现

需求说明

计算指定目录下所有文件的MD5哈希值,与malicious_hash.txt文件内存储的哈希值比对,匹配时打印MATCH FOUND提示。

现有代码问题梳理

  • 恶意哈希文件读取使用二进制模式,得到的bytes类型无法直接和字符串格式的MD5值匹配,且没有处理每行的换行符、空白字符
  • 计算文件MD5的函数参数名拼写错误,路径判断逻辑正常但缺少哈希比对步骤
  • MD5值打印语句存在语法错误

修正后完整可运行代码

import os
import hashlib

# 配置参数
MALICIOUS_HASH_PATH = "C:/Users/user/Downloads/malicious_hash.txt"
SCAN_FOLDER = "C:/Users/user/Downloads"

# 预加载恶意哈希集合,提升比对效率
malicious_hash_set = set()
with open(MALICIOUS_HASH_PATH, 'r', encoding='utf-8') as f:
    for line in f:
        # 去除每行的换行符、首尾空白,跳过空行
        cleaned_hash = line.strip().lower()
        if cleaned_hash:
            malicious_hash_set.add(cleaned_hash)

def cal_file_md5(file_path):
    """计算单个文件的MD5哈希值"""
    with open(file_path, "rb") as f:
        file_hash = hashlib.md5()
        # 分块读取大文件,避免内存溢出
        while chunk := f.read(1024 * 1024):
            file_hash.update(chunk)
    return file_hash.hexdigest().lower()

def cal_folder_hash(folder):
    """递归遍历目录计算所有文件MD5并比对恶意哈希"""
    if not os.path.exists(folder):
        print(f"文件夹不存在: {folder}")
        return
    for file in os.listdir(folder):
        path = os.path.join(folder, file)
        if os.path.isdir(path):
            # 递归遍历子目录
            cal_folder_hash(path)
        else:
            print(f"当前扫描文件: {path}")
            current_md5 = cal_file_md5(path)
            print(f"MD5值: {current_md5}")
            # 哈希比对逻辑
            if current_md5 in malicious_hash_set:
                print("*MATCH FOUND*")

if __name__ == "__main__":
    cal_folder_hash(SCAN_FOLDER)

优化说明

  • 将恶意哈希存入集合,比对时间复杂度从O(n)降到O(1),哈希数量多的时候效率提升明显
  • 统一将哈希值转为小写,避免大小写不一致导致的匹配失败
  • 增加空行跳过逻辑,适配malicious_hash.txt里存在空行的场景
  • 增加if __name__ == "__main__"判断,避免脚本被导入时自动执行扫描逻辑

内容的提问来源于stack exchange,提问作者Jamysim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 22:36:01