如何使用Python生成全部6位数字编码(暴力破解场景)
正确生成所有6位数字编码的Python实现
原代码的问题
- 原函数用
random.choice()是随机生成单个6位数字串,无法遍历所有可能的组合 - 最后
print(brute_force)打印的是函数对象而非调用结果,就算改成print(brute_force())也只能生成随机单个编码,不符合暴力枚举所有组合的需求
正确实现方法
要生成所有0-9组成的6位数字编码(包含前导零,比如000000这类),最简洁高效的方式是用itertools.product生成笛卡尔积,它能覆盖所有可能的组合:
import itertools def generate_all_6digit_codes(): digits = '0123456789' # 生成所有6位数字的笛卡尔积组合 for combo in itertools.product(digits, repeat=6): yield ''.join(combo) # 遍历输出所有编码(注意:总共有10^6=100万条数据,直接打印会耗时,建议按需处理) for code in generate_all_6digit_codes(): print(code)
说明
itertools.product(digits, repeat=6)会生成所有长度为6的数字组合,每个位置都取0-9中的数字- 用生成器
yield可以避免一次性把100万条数据加载到内存,内存占用更低 - 如果需要把所有编码存入列表,直接转换即可:
all_codes = list(generate_all_6digit_codes())
无依赖替代写法
如果不想使用itertools模块,也可以用嵌套循环实现,只是代码会更繁琐:
def generate_all_6digit_codes(): for d1 in range(10): for d2 in range(10): for d3 in range(10): for d4 in range(10): for d5 in range(10): for d6 in range(10): yield f"{d1}{d2}{d3}{d4}{d5}{d6}" # 使用方式同上 for code in generate_all_6digit_codes(): print(code)
这种写法逻辑和itertools实现一致,但嵌套层数多,可读性和简洁性不如前者。
内容的提问来源于stack exchange,提问作者Echiye Forcde
相关产品推荐
相关产品推荐

