news 2026/2/25 23:48:56

python语言使用全局变量+线程锁解密程序代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python语言使用全局变量+线程锁解密程序代码
importosimportrarfileimportthreadingfromqueueimportQueueimporttime# 指定路径rarfile.UNRAR_TOOL=r"UnRAR.exe"# 创建一个线程安全的队列用于存储密码password_queue=Queue()# 创建一个线程安全的标志用于指示是否已找到密码password_found=threading.Event()# 存储找到的密码found_password=None# 创建一个锁用于线程安全的输出print_lock=threading.Lock()# ========== 新增:全局计数器 + 计数器锁 ==========global_password_count=0count_lock=threading.Lock()# 保证计数器修改的线程安全deftry_decrypt(file_path,password):"""尝试使用给定密码解压 RAR 文件"""try:withrarfile.RarFile(file_path)asrf:rf.extractall(pwd=password.encode())returnTrueexceptrarfile.BadRarFile:returnFalseexceptExceptionase:withprint_lock:print(f"Error with password{password}:{e}")returnFalsedefworker(file_path):"""工作线程函数,从队列中获取密码并尝试解密"""globalfound_password,global_password_count# 引用全局计数器whilenotpassword_found.is_set():# 从队列中获取密码,如果队列为空则阻塞password=password_queue.get()# 如果已经找到密码,退出循环ifpassword_found.is_set():password_queue.task_done()break# ========== 关键修改:更新全局计数器(加锁保证线程安全) ==========current_global_count=0withcount_lock:global_password_count+=1current_global_count=global_password_count# 获取当前全局计数(避免后续被其他线程修改)# 尝试解密iftry_decrypt(file_path,password):# 设置标志为已找到密码password_found.set()found_password=passwordwithprint_lock:print(f"\n✅ 找到密码:{password}(全局第{current_global_count}个密码)")# 标记任务已完成password_queue.task_done()# 输出当前尝试的密码(使用全局计数,加锁保证打印有序)ifnotpassword_found.is_set():withprint_lock:print(f"🔄 尝试第{current_global_count}个密码:{password}")defmain():# RAR 文件路径file_path=r"password.rar"# 密码字典文件路径,你需要将其替换为实际的密码字典文件路径dict_path=r"wordlist1.txt"# 线程数量num_threads=10# 检查文件是否存在ifnotos.path.exists(file_path):print(f"RAR 文件不存在:{file_path}")returnifnotos.path.exists(dict_path):print(f"密码字典文件不存在:{dict_path}")return# 读取密码字典try:withopen(dict_path,"r",encoding="utf8")asf:passwords=[line.strip()forlineinf.readlines()]ifnotpasswords:print("密码字典为空")returnexceptExceptionase:print(f"读取密码字典时出错:{e}")return# 将密码加入队列forpasswordinpasswords:password_queue.put(password)print(f"开始多线程破解 RAR 文件,使用{num_threads}个线程")print(f"RAR 文件:{file_path}")print(f"密码字典:{dict_path}")print(f"总密码数:{len(passwords)}")print("-"*50)start_time=time.time()# 创建并启动工作线程threads=[]for_inrange(num_threads):t=threading.Thread(target=worker,args=(file_path,))t.daemon=Truet.start()threads.append(t)# 等待队列中的所有任务完成或找到密码password_queue.join()elapsed_time=time.time()-start_time# 输出结果ifpassword_found.is_set():print(f"🎉 破解成功!密码为:{found_password}")else:print("😔 未能找到有效密码")print(f"耗时:{elapsed_time:.2f}秒")print(f"全局总尝试密码数:{global_password_count}")if__name__=="__main__":main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/24 20:43:37

lora-scripts使用手册:轻松上手LoRA微调,支持SD与LLM双场景

LoRA微调实战指南:用lora-scripts打通SD与LLM的轻量化定制之路 在AI生成内容(AIGC)迅速普及的今天,一个现实问题摆在开发者面前:如何让庞大的预训练模型真正“听懂”我们的需求?无论是想打造一款具有独特艺…

作者头像 李华
网站建设 2026/2/22 4:31:59

如何用50张图片训练出专属人物LoRA模型?lora-scripts实战分享

如何用50张图片训练出专属人物LoRA模型?lora-scripts实战分享 在AI生成内容(AIGC)快速普及的今天,越来越多创作者和开发者不再满足于“通用模型”的千篇一律输出。他们更关心一个问题:如何仅用几十张照片,就…

作者头像 李华
网站建设 2026/2/21 14:11:25

如何用50张图片训练专属AI绘画模型?lora-scripts实战教程来了

如何用50张图片训练专属AI绘画模型?LoRA-Scripts实战教程来了 在生成式AI席卷内容创作的今天,一个现实问题摆在许多设计师和开发者面前:通用的大模型虽然强大,但画出来的风格总是“差点意思”——想要赛博朋克风,结果出…

作者头像 李华
网站建设 2026/2/25 3:10:02

模拟I2C入门指南:GPIO控制的通俗解释

从零开始搞懂模拟I2C:用GPIO手搓通信协议的硬核玩法 你有没有遇到过这种情况——项目里只剩两个空闲IO口,却要接上温度传感器、EEPROM和光照芯片?硬件I2C外设早就被占用了,换主控又不现实。这时候,老工程师往往会微微一…

作者头像 李华
网站建设 2026/2/22 13:11:53

SSD1306中文手册解析:命令与数据切换核心要点

深入SSD1306驱动核心:命令与数据切换的底层逻辑揭秘你有没有遇到过这样的情况?接好OLED屏幕,烧录代码,通电后——黑屏。或者勉强点亮了,却显示一堆乱码、偏移错位,调试半天无从下手。如果你用的是SSD1306 驱…

作者头像 李华
网站建设 2026/2/25 20:37:07

从零开始使用lora-scripts训练赛博朋克风格LoRA模型(含数据预处理技巧)

从零开始使用 lora-scripts 训练赛博朋克风格 LoRA 模型 在 AI 图像生成领域,你有没有遇到过这种情况:明明输入了“赛博朋克城市夜景”,结果模型却给你一个泛泛的都市黄昏?或者想复现《银翼杀手》那种潮湿霓虹、机械义体与东方元素…

作者头像 李华