import rarfile import random import time import sys class MyIterator(): letters = '`1234567890-=/*-qwertyuiop[]\|asdfghjkl;zxcvbnm,.?><{}:QERWTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()+' #键盘上所有可能输入的字符 min_digits = 0 max_digits = 0 def __init__(self,min_digits,max_digits): if min_digits < max_digits: self.min_digits = min_digits self.max_digits = max_digits else: self.min_digits = max_digits self.max_digits = min_digits def __iter__(self): return self def __next__(self): rst = str() for item in range(0, random.randrange(self.min_digits, self.max_digits + 1)): rst += random.choice(MyIterator.letters) return rst def extract(): start_time = time.time() zfile = rarfile.RarFile(r'G:\Study\数据分析\利用Python进行数据分析(第二版)高清中文版英文版和源代码\利用Python进行数据分析(第二版)高清中文版英文版和源代码\利用Python进行数据分析(第二版).rar') # 解压文件地址 for p in MyIterator(4, 10): #4到10位密码 try: zfile.extractall(path=".", pwd=str(p).encode('utf-8')) # 文件地址这里用.代表上述zfile地址 print("the password is {}".format(p)) now_time = time.time() print("spend time is {}".format(now_time - start_time)) sys.exit(0) except Exception as e: print('error', p) pass if __name__ == '__main__': extract()