如何重置Python密码猜测器中的for循环以实现分段密码破解?
Python密码猜测器分段破解修复方案
现有代码的核心问题
- 初始循环条件
while Guess != list[n-1]逻辑错误:n初始为0时,list[n-1]会取列表最后一个元素,导致循环目标完全偏离。 - 单段破解逻辑无效:仅生成一次对应长度的随机字符串,没有持续猜测直到匹配当前分段。
- 分段切换逻辑混乱:猜对一段后未重置猜测流程,无法正确进入下一段的破解循环。
修正后的完整代码
from random import randint import time LettersAndSymbols = [ "A", "a", "B", "b", "C", "c", "D", "d", "E", "e", "F", "f", "G", "g", "H", "h", "I", "i", "J", "j", "K", "k", "L", "l", "M", "m", "N", "n", "O", "o", "P", "p", "Q", "q", "R", "r", "S", "s", "T", "t", "U", "u", "V", "v", "W", "w", "X", "x", "Y", "y", "Z", "z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" ] print("请勿输入个人真实密码") ClientPassword = input("请输入测试用密码\n") startTime = time.time() # 按每3个字符拆分密码,避免用内置关键字list命名变量 segment_size = 3 password_segments = [ClientPassword[i:i+segment_size] for i in range(0, len(ClientPassword), segment_size)] cracked_segments = [] # 逐个破解每个分段 for segment in password_segments: current_guess = "" # 持续生成随机字符串,直到匹配当前分段 while current_guess != segment: current_guess = "" for _ in range(len(segment)): current_guess += LettersAndSymbols[randint(0, 61)] cracked_segments.append(current_guess) print(f"已破解分段: {current_guess}") executionTime = (time.time() - startTime) full_cracked_password = "".join(cracked_segments) print(f"\n破解完成,耗时 {round(executionTime, 1)} 秒!\n原密码为: {full_cracked_password}")
关键修改点说明
- 变量命名优化:把
list改为password_segments,避免和Python内置类型冲突。 - 分段遍历逻辑:用
for循环直接遍历每个分段,确保依次处理每一段。 - 单段破解逻辑:每个分段单独用
while循环持续猜测,直到匹配成功,完全重置猜测流程后再处理下一段。 - 移除冗余变量:删掉原代码中逻辑混乱的
n、reset等变量,让流程更清晰易懂。
内容的提问来源于stack exchange,提问作者TheNeverEndingError
相关产品推荐
相关产品推荐

