Python计算用户输入路径的ISO文件哈希值结果不正确如何解决
问题排查与解决方案
核心错误原因
- 哈希对象初始化时混入了路径内容:你调用
hashlib.sha512(userInput.encode())时,已经将用户输入的路径字符串的编码值作为初始内容加入了哈希计算,后续调用update(readIso)追加了ISO文件内容,最终得到的是「路径字符串+文件内容」的拼接哈希,并非纯文件内容的哈希,因此和sha512sum的计算结果不符。 - 可选优化点:单文件体积较大的ISO文件直接用
read()一次性加载到内存,可能触发内存占用过高的问题,更推荐分块读取计算。
修正后可正常运行的代码
import hashlib userInput = input("Path to the file: ") # 初始化空的SHA512对象,不传入任何初始内容 result = hashlib.sha512() # 使用with上下文管理器自动管理文件句柄,避免资源泄漏 with open(userInput, 'rb') as isoFile: # 分块读取文件,每次读取4KB,适配大文件场景 for chunk in iter(lambda: isoFile.read(4096), b''): result.update(chunk) print("The hash value of the file is: ") print(result.hexdigest())
验证说明
修正后的代码仅对ISO文件本身的二进制内容进行哈希计算,运行后输出的结果将和sha512sum工具给出的标准值c9b75d55fa501415ad8a1b3e597cb3c398aaf4f8c08e9219b676c07280b1d9d8cd2c6dcc6e97e077acef3d4fac4e15b021df41671b5e8f15bb557050a284e684完全一致。
内容的提问来源于stack exchange,提问作者Zeldarocks
相关产品推荐
相关产品推荐

