python利用itertools生成密码字典并多线程撞库破解rar密码


Posted in Python onAugust 12, 2019

脚本功能:

  • 利用itertools生成密码字典(迭代器形式)
  • 多线程并发从密码字典中取出密码进行验证
  • 验证成功后把密码写入文件中保存
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Author:Leslie-x
import itertools as its
import threading
import rarfile
import os
words = '0123456789abcdefghijklmnopqrstuvwxyz' # 涉及到生成密码的参数
flag = True # 是否关闭线程的标志

def append_on_file(password,file_name):
  # 把解析出的密码写入到文件中
  with open('password.txt', 'a', encoding='utf8') as f:
    text = file_name+':'+password + '\n'
    f.write(text)
def get_password(min_digits, max_digits, words):
  """
  :param min_digits: 密码最小长度
  :param max_digits: 密码最大长度
  :param words: 密码可能涉及的字符
  :return: 密码生成器
  """
  while min_digits <= max_digits:
    pwds = its.product(words, repeat=min_digits)
    for pwd in pwds:
      yield ''.join(pwd)
    min_digits += 1
def extract(File,file_name):
  """
  若线程关闭标志为True,就执行循环,从密码生成器中取出密码,验证密码是否正确
  密码正确,则把密码写入文件中,并将线程关闭标志flag设定为False,通知其他线程关闭
  """
  global flag
  while flag:
    p = next(passwords)
    try:
      File.extractall(pwd=p) # 打开压缩文件,提供密码...
      flag = False
      print("password is " + p) ###破解到密码
      append_on_file(p,file_name)
      break
    except:
      print(p)
def mainStep(file_path,file_name):
  """
  多线程并发验证密码
  :param file_path: rar压缩文件路径列表
  :return:
  """
  file = rarfile.RarFile(file_path)
  for pwd in range(3):
    t = threading.Thread(target=extract, args=(file,file_name))
    t.start()
if __name__ == '__main__':
  # 主程序
  base_dir = r'E:\迅雷下载\rar'
  for file_info in os.listdir(base_dir):
    try:
      # 拼接压缩文件路径
      file_path = os.path.join(base_dir, file_info)
      # 压缩文件名称
      file_name = file_info.split('.')[0]
      # 生成密码字典:密码长度最小为4,最大为11
      passwords = get_password(4, 11, words)
      # 将任务分发给线程执行
      mainStep(file_path,file_name)
    except:
      pass

注意:当前脚本在知道密码长度大概范围,可能涉及的字符具体范围下效率可行;如果对密码长度和涉及字符完全不知,撞库难度非常大

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现HTTP协议下的文件下载方法总结
Apr 20 Python
python实现汉诺塔递归算法经典案例
Mar 01 Python
Python实现加载及解析properties配置文件的方法
Mar 29 Python
Python变量赋值的秘密分享
Apr 03 Python
Python SVM(支持向量机)实现方法完整示例
Jun 19 Python
Python3 列表,数组,矩阵的相互转换的方法示例
Aug 05 Python
将pytorch转成longtensor的简单方法
Feb 18 Python
使用celery和Django处理异步任务的流程分析
Feb 19 Python
PyTorch中的C++扩展实现
Apr 02 Python
哪些是python中web开发框架
Jun 17 Python
python 爬取免费简历模板网站的示例
Sep 27 Python
Python实战之大鱼吃小鱼游戏的实现
Apr 01 Python
Python实现网页截图(PyQT5)过程解析
Aug 12 #Python
python实现知乎高颜值图片爬取
Aug 12 #Python
python3 enum模块的应用实例详解
Aug 12 #Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
Aug 12 #Python
django+echart数据动态显示的例子
Aug 12 #Python
Flask框架学习笔记之使用Flask实现表单开发详解
Aug 12 #Python
Flask框架学习笔记之表单基础介绍与表单提交方式
Aug 12 #Python
You might like
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
2013/01/19 PHP
Zend的MVC机制使用分析(二)
2013/05/02 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
YII框架中使用memcache的方法详解
2017/08/02 PHP
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
不同浏览器的怪癖小结
2010/07/11 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
javascript中的作用域scope介绍
2010/12/28 Javascript
Jquery中基本选择器用法实例详解
2015/05/18 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
Vuex简单入门
2017/04/19 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
vue中node_modules中第三方模块的修改使用详解
2019/05/31 Javascript
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
2019/12/10 Python
Pytorch: 自定义网络层实例
2020/01/07 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
娇韵诗加拿大官网:Clarins加拿大
2017/11/20 全球购物
大码女装:Ulla Popken
2019/08/06 全球购物
最新的大学生找工作自我评价
2013/09/29 职场文书
简历的自荐信
2013/12/19 职场文书
企业管理毕业生求职信范文
2014/03/07 职场文书
公安学专业求职信
2014/07/27 职场文书
民族精神月活动总结
2014/08/28 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
见习报告格式要求
2014/11/04 职场文书
作弊检讨书范文
2015/05/06 职场文书
给老师的保证书怎么写
2015/05/09 职场文书
工作态度怎么写
2015/06/25 职场文书
银行客户经理培训心得体会
2016/01/09 职场文书
八年级英语教学反思
2016/02/15 职场文书
Pandas实现批量拆分与合并Excel的示例代码
2022/05/30 Python