Python 如何将19个随机生成内容与密码每次随机排序输出
功能实现修正
原代码核心问题
- 循环内生成的临时字符串没有做持久化存储,循环执行完成后所有临时生成的蜜词都会被覆盖,无法留存
- 没有对「19个随机蜜词+1个用户真实密码」的集合做统一的随机重排操作,也没有逐行输出收集到的内容
实现逻辑
- 新建空列表作为待输出的条目池,先把用户输入的真实密码存入池内
- 循环19次,每次生成符合字符规则的20位随机串作为假蜜词,全部存入条目池
- 直接调用Python内置的
random.shuffle()方法对条目池做原地随机排序,该方法会自动打乱列表内所有元素的顺序,不需要手动实现随机排序逻辑 - 遍历打乱后的条目池,逐行打印所有内容即可
修正后可直接运行的代码
import secrets import string import getpass import random # 获取用户输入的真实密码 real_password = getpass.getpass("请输入你的密码:") # 定义蜜词生成可用的字符集 honeyword_char_set = (string.ascii_letters + string.hexdigits + string.digits + string.punctuation) # 初始化待输出的条目池 output_pool = [] # 将真实密码加入池内 output_pool.append(real_password) # 生成19个独立的随机蜜词加入池内 for _ in range(19): fake_honeyword = ''.join(secrets.choice(honeyword_char_set) for _ in range(20)) output_pool.append(fake_honeyword) # 打乱整个池内的元素顺序 random.shuffle(output_pool) print('Your honeypot is ready:', '\n') # 逐行输出打乱后的所有内容 for entry in output_pool: print(entry)
效果说明
- 每次程序启动时,
random模块的默认随机种子会和系统实时时间绑定,能保证两次运行的输出顺序完全不重复 - 使用
secrets生成的假蜜词是密码级别的随机串,长度和常见密码长度一致,不会出现和真实密码辨识度差异过大的问题
内容的提问来源于stack exchange,提问作者GeoP
相关产品推荐
相关产品推荐

