简化三位字母暴力破解程序并实现整串密码一次性输入功能
三位密码暴力破解程序优化方案
方案1:修改函数支持直接传入完整三位密码
直接将函数入参改为单个字符串类型,Python的字符串本身支持下标索引取单个字符,无需额外转列表拆分,修改后代码如下:
def bruteforce(pw_str): # 先做输入合法性校验 if len(pw_str) != 3 or not pw_str.isalpha(): print("请输入合法的三位字母密码") return test1 = 64 pwo1 = ord(pw_str[0]) test2 = 64 pwo2 = ord(pw_str[1]) test3 = 64 pwo3 = ord(pw_str[2]) while(test1 != pwo1): test1 += 1 while(test2 != pwo2): test2 += 1 while(test3 != pwo3): test3 += 1 print("The password is " + chr(pwo1) + chr(pwo2) + chr(pwo3))
调用示例:
bruteforce("ABC")
方案2:不改动原有函数,调用时参数解包
如果你需要保留原有三个参数的函数逻辑,可使用Python的参数解包语法实现传参:
# 原有函数无需修改 def bruteforce(pw1, pw2, pw3): test1 = 64 pwo1 = ord(pw1) test2 = 64 pwo2 = ord(pw2) test3 = 64 pwo3 = ord(pw3) while(test1 != pwo1): test1 += 1 while(test2 != pwo2): test2 += 1 while(test3 != pwo3): test3 += 1 print("The password is " + chr(pwo1) + chr(pwo2) + chr(pwo3)) # 调用时输入完整密码,解包为三个参数 full_pw = input("请输入三位密码:").strip() if len(full_pw) == 3: bruteforce(*full_pw) else: print("请输入三位长度的密码")
在可迭代对象(字符串、列表等)前加*符号,会自动将元素按顺序拆分为独立位置参数,刚好匹配原有函数的三个入参要求。
逻辑优化建议(可选)
当前代码中的while循环仅将test变量自增到与目标ASCII码相等,最终输出的仍是直接传入的原始密码,未实现真实的暴力枚举破解效果。如果需要实现完整的暴力破解逻辑,可遍历所有三位字母组合与目标对比,示例实现如下:
import itertools import string def bruteforce(target_pw): # 枚举所有三位大写字母组合,如需支持小写可替换为string.ascii_letters for combo in itertools.product(string.ascii_uppercase, repeat=3): attempt = ''.join(combo) if attempt == target_pw: print(f"The password is {attempt}") return
内容的提问来源于stack exchange,提问作者XEMIIX
相关产品推荐
相关产品推荐

