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

Python编写的MD5哈希破解程序处理密码列表超4750行时意外停止

故障根因分析

    1. 循环终止逻辑错误:当前用while (line := file.readline().rstrip())作为循环判断条件,只要读取到的行经过rstrip()处理后为空(比如密码列表中存在空行、全空格/换行符的行),判断条件就会返回False,循环直接终止,完全不会继续读取后面的内容。4750行后终止大概率是第4750行附近存在空行。
    1. 文件读取编码未显式指定:打开passwordlist.txt时没有指定编码参数,不同操作系统默认编码不同,一旦密码列表中存在超出默认编码范围的特殊字符,程序会直接抛出编码异常终止。
    1. 冗余的第三方库安装逻辑:hashlib是Python官方标准库,不存在需要pip安装的情况,原有异常捕获逻辑完全冗余,误触发时反而会安装pip源里废弃的hashlib占位包,导致运行异常。

修复后代码

import hashlib

def test_hash(target, string):
    hashed = hashlib.md5(string.encode('utf-8')).hexdigest()
    if target == hashed:
        print(f'Found coincidence at -> {string}')
        return 1
    return 0

target_hash = 'an-md5-hash'

if __name__ == '__main__':
    # 显式指定编码,可选加errors='ignore'忽略无法解码的异常字符
    with open('passwordlist.txt', 'r', encoding='utf-8') as file:
        count = 1
        # 直接迭代文件对象,空行也会正常遍历不会中断
        for line in file:
            line = line.rstrip()
            print(f'Trying password {count} -> {line}')
            count += 1
            result = test_hash(target_hash, line)
            if result == 1:
                break

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:36:02