Python对比文件MD5与病毒库MD5始终返回clear的问题咨询
错误原因
- 类型与结构不匹配:
readlines()返回的是包含文件所有行的列表,你直接拿整个列表和hexdigest()生成的字符串类型哈希值做相等判断,永远不可能成立。 - 文件打开模式错误:你的viruslist.txt是存储MD5字符串的文本文件,用
rb二进制模式读取得到的是bytes类型数据,和字符串类型的哈希值类型不统一,无法匹配。 - 未处理行尾换行符:即便是单独取病毒库的每一行内容,
readlines()读出的每行末尾默认会携带\n/\r\n换行符,不做去除处理的话即使哈希值内容一致也会匹配失败。 - 未正确关闭文件:代码中打开的两个文件对象都没有执行关闭操作,长时间运行可能会出现资源泄漏问题,推荐使用
with上下文管理器自动处理文件关闭。
修正后的代码
import hashlib # 计算目标文件的MD5哈希 md5_hash = hashlib.md5() with open('C:/Users/User/Desktop/irustesting/eicar.com','rb') as a_file: content = a_file.read() md5_hash.update(content) digest = md5_hash.hexdigest() print(f"目标文件哈希:{digest}") # 读取病毒库并比对 virus_found = False with open('C:/FYP/SecuCOM2022/viruslist.txt','r', encoding='utf-8') as viruslist: for line in viruslist: # 去除每行首尾的空白字符(换行符、空格等) virus_hash = line.strip() if virus_hash == digest: virus_found = True break print("detected" if virus_found else "clear")
内容的提问来源于stack exchange,提问作者Jun Jie Ong
相关产品推荐
相关产品推荐

