2023年7月31日发(作者:)
python破解zip压缩包密码曾经,在⽹上下载过⼀份“学习资料”,zip格式的⼀份不⼩的压缩⽂件。费劲巴拉的从“某盘”下载,却发现解压需要“密码”,顿时⼼⾥有句不当讲的话…为了破解压缩⽂件的密码,我在搜索引擎输⼊“python zip”两个关键词。经过过⼀番总结,发现破解的思路都是⼀样的,暴⼒破解。过程如下: 建⽴密码字典(常⽤密码)尝试⽤每⼀个密码,来解压⽂件解压成功,跳出循环 密码字典⽐如,现在⼀个纯数字的六位密码“050825”可以从依次遍历“000000”到“999999”,把所有的结果保存到txt⽂件。这样的缺点就是⽐较死板,只能是6位数字,另外就是⽐较占内存。于是,有个⼤神写了个“字典⽣成器”,你需要做的是传⼊两个参数“字典的组成元素”和“密码的长度列表”⽐如,纯数字的“050825”,你就传⼊如下的参数:[0,1,2,3,4,5,6,7,8,9],数字就这9个[6],密码的长度如此,便可按你的要求得到密码的Python ⽣成器。我们知道,⽣成器是不占⽤内存的。如果数字不过瘾,⽐如有的密码是字符串。可以考虑在第⼀个参数中,加⼊“a-z”和“A-Z”zipfile解压⽂件zipfile模块是python⾃带的,⽤于对zip⽂件的读、写、追加、解压操作等。“解压”主要是⽤到ZipFile对象的extractall()⽅法extractall(path=None, members=None, pwd=None)⽅法主要有三个参数。我们来看⼀下每个参数的含义:path 指定解压后⽂件的存储位置members(可选)指定Zip⽂件中要解压的⽂件,这个⽂件名称必须是通过namelist()⽅法返回列表的⼦集pwd 指定Zip⽂件的解压密码(编码“utf-8”)贴个代码:import zipfile
try: with e('') as zFile:
#
创建ZipFile对象 #
解压⽂件 tall(path='./',pwd=b'1234') print('解压成功!')except: print('解压失败')进度条可视化关于进度条,本程序使⽤ tqdm扩展库1、密码迭代器2、密码总个数for pwd in tqdm(_iterable(all_passwd(dictionaries, maxlen) for maxlen in lengths), total=total): if extract(zfile, pwd): #
记得extract函数返回的是bool类型的哦 break这是破解的结果:测试结果:全部代码:import timefrom typing import Listfrom tqdm import tqdmfrom itertools import chainfrom zipfile import ZipFilestart = ()# chr(97) -> 'a'
这个变量保存了密码包含的字符集# dictionaries = [chr(i) for i in# chain(range(97, 123), # a - z# range(65, 91), # A - Z# range(48, 58))] # 0 - 9dictionaries = [str(i) for i in range(10)]# print(dictionaries)# (['.com', 'www.']) #
添加⾃定义的字符集file_name =r"./" #
你的⽂件路径def all_passwd(dictionaries: List[str], maxlen: int): #
返回由 dictionaries
中字符组成的所有长度为 maxlen
的字符串 def helper(temp: list, start: int, n: int): #
辅助函数,是个⽣成器 if start == n: #
达到递归出⼝ yield ''.join(temp) return for t in dictionaries: temp[start] = t #
在每个位置 yield from helper(temp, start + 1, n) yield from helper([0] * maxlen, 0, maxlen)zfile = ZipFile(file_name, 'r') #
很像opendef extract(zfile: ZipFile, pwd: str) -> bool: # zfile:
⼀个ZipFile类, pwd:
密码 try: tall(path='.', pwd=('utf-8')) #
密码输⼊错误的时候会报错 now = () #
故使⽤ try - except
语句 print(f"Password is: {pwd}") #
将正确的密码输出到控制台 return True except: return False#
⽤ bool
类型的返回值告诉主程序是否破解成功 (意思就是返回 True
了以后就停⽌)lengths = [6] #
密码长度total = sum(len(dictionaries) ** k for k in lengths) #
密码总数for pwd in tqdm(_iterable(all_passwd(dictionaries, maxlen) for maxlen in lengths), total=total): if extract(zfile, pwd): #
记得extract函数返回的是bool类型的哦 break
2023年7月31日发(作者:)
python破解zip压缩包密码曾经,在⽹上下载过⼀份“学习资料”,zip格式的⼀份不⼩的压缩⽂件。费劲巴拉的从“某盘”下载,却发现解压需要“密码”,顿时⼼⾥有句不当讲的话…为了破解压缩⽂件的密码,我在搜索引擎输⼊“python zip”两个关键词。经过过⼀番总结,发现破解的思路都是⼀样的,暴⼒破解。过程如下: 建⽴密码字典(常⽤密码)尝试⽤每⼀个密码,来解压⽂件解压成功,跳出循环 密码字典⽐如,现在⼀个纯数字的六位密码“050825”可以从依次遍历“000000”到“999999”,把所有的结果保存到txt⽂件。这样的缺点就是⽐较死板,只能是6位数字,另外就是⽐较占内存。于是,有个⼤神写了个“字典⽣成器”,你需要做的是传⼊两个参数“字典的组成元素”和“密码的长度列表”⽐如,纯数字的“050825”,你就传⼊如下的参数:[0,1,2,3,4,5,6,7,8,9],数字就这9个[6],密码的长度如此,便可按你的要求得到密码的Python ⽣成器。我们知道,⽣成器是不占⽤内存的。如果数字不过瘾,⽐如有的密码是字符串。可以考虑在第⼀个参数中,加⼊“a-z”和“A-Z”zipfile解压⽂件zipfile模块是python⾃带的,⽤于对zip⽂件的读、写、追加、解压操作等。“解压”主要是⽤到ZipFile对象的extractall()⽅法extractall(path=None, members=None, pwd=None)⽅法主要有三个参数。我们来看⼀下每个参数的含义:path 指定解压后⽂件的存储位置members(可选)指定Zip⽂件中要解压的⽂件,这个⽂件名称必须是通过namelist()⽅法返回列表的⼦集pwd 指定Zip⽂件的解压密码(编码“utf-8”)贴个代码:import zipfile
try: with e('') as zFile:
#
创建ZipFile对象 #
解压⽂件 tall(path='./',pwd=b'1234') print('解压成功!')except: print('解压失败')进度条可视化关于进度条,本程序使⽤ tqdm扩展库1、密码迭代器2、密码总个数for pwd in tqdm(_iterable(all_passwd(dictionaries, maxlen) for maxlen in lengths), total=total): if extract(zfile, pwd): #
记得extract函数返回的是bool类型的哦 break这是破解的结果:测试结果:全部代码:import timefrom typing import Listfrom tqdm import tqdmfrom itertools import chainfrom zipfile import ZipFilestart = ()# chr(97) -> 'a'
这个变量保存了密码包含的字符集# dictionaries = [chr(i) for i in# chain(range(97, 123), # a - z# range(65, 91), # A - Z# range(48, 58))] # 0 - 9dictionaries = [str(i) for i in range(10)]# print(dictionaries)# (['.com', 'www.']) #
添加⾃定义的字符集file_name =r"./" #
你的⽂件路径def all_passwd(dictionaries: List[str], maxlen: int): #
返回由 dictionaries
中字符组成的所有长度为 maxlen
的字符串 def helper(temp: list, start: int, n: int): #
辅助函数,是个⽣成器 if start == n: #
达到递归出⼝ yield ''.join(temp) return for t in dictionaries: temp[start] = t #
在每个位置 yield from helper(temp, start + 1, n) yield from helper([0] * maxlen, 0, maxlen)zfile = ZipFile(file_name, 'r') #
很像opendef extract(zfile: ZipFile, pwd: str) -> bool: # zfile:
⼀个ZipFile类, pwd:
密码 try: tall(path='.', pwd=('utf-8')) #
密码输⼊错误的时候会报错 now = () #
故使⽤ try - except
语句 print(f"Password is: {pwd}") #
将正确的密码输出到控制台 return True except: return False#
⽤ bool
类型的返回值告诉主程序是否破解成功 (意思就是返回 True
了以后就停⽌)lengths = [6] #
密码长度total = sum(len(dictionaries) ** k for k in lengths) #
密码总数for pwd in tqdm(_iterable(all_passwd(dictionaries, maxlen) for maxlen in lengths), total=total): if extract(zfile, pwd): #
记得extract函数返回的是bool类型的哦 break
发布评论