python破解压缩密码.穷举.或弱密码

2022-12-13

python穷举破解与效率

python破解压缩文件

python破解zip

pyton穷举破解压缩包

zip用的相对多点,没研究其他的,本来想找来直接拷贝的,结果还是花了时间自己写

比较坑的一点大家都用的Python标准库中的zipfile模块,但是他过时了

正常用的压缩软件不是传统加密,而是AES-256加密ZIP文件,要pyzipper库

穷举效率确实要好好考虑一下,直接windows跑cpu17%

还可探索多线程与性能

穷举密码文件文件:有26种字符,长度4的组合可能性有456976个可能,2.61MB

# 第456972个,用了106秒,
# 第456972个,用了117秒 加了每次输出 IO损耗?
# 第456972个,用了115秒 加了每10万输出加时间,取余损耗?
# 第456972个,用了99秒  又试了一次,可能是普通波动

github搜弱密码字典可以找到用,没看到很优秀的弱密码字典,可以分享给我

可以拿个学生云服务器跑跑看

配合密码的txt-每行一个-逐个试.py

密码文件下面自己穷举生成,或者网上找弱密码字典,格式自己生成看

import itertools
import math
import time
import pyzipper


# Python标准库中的zipfile模块只支持CRC32加密的zip文件,传统加密是通过CRC32加密,也即ZIP2.0
# 360压缩用的不是传统加密,WinRAR默认在CTR模式下使用AES-256加密ZIP文件,
# AES-256比传统加密算法安全得多
# Python有个pyzipper库可以很好的兼容代替zipfile

# 还可探索多线程与性能
# 都文件会又内存损耗,可以直接用itertools穷举

# 加密的解压包
# zip_file = pyzipper.AESZipFile('D:/test.zip', 'r')
# zip_file = pyzipper.AESZipFile('--9a91--.zip', 'r')  # 同级
zip_file = pyzipper.AESZipFile('--zzzv--.zip', 'r')  # 同级

# 字典文件,其中包含了大量可能的密码
# 或者用穷举生成的密码文件
psw_file = "pass.txt"
# 第456972个,用了106秒,文件2.61MB
# 第456972个,用了117秒 加了每次输出 IO损耗?
# 第456972个,用了115秒 加了每10万输出加时间,取余损耗?
# 第456972个,用了99秒  又试了一次,可能是普通波动
with open(psw_file) as f:
    mi_ma = f.read().splitlines()
t_now = time.time()
m_num = 1
for mm in mi_ma:
    if m_num % 100000 == 0:  # 每10万输出一次时间
        print('第%s个,目前耗时%s秒' % (m_num, int(time.time()-t_now)))
    m_num += 1
    try:
        zip_file.extractall(pwd=str.encode(mm))
        print("解密成功,第%s尝试,密码为:%s, 耗时%s秒" % (m_num, mm, time.time()-t_now))
        break
    except:
        # 如果解压失败,则继续
        pass

穷举生成密码字典.py

生成只有小写字母的4位密码字典。自己看着改

import itertools
import math
import random
# python穷举
# 键盘上所有可能输入的字符 `1234567890-=/*-qwertyuiop[]\|asdfghjkl;zxcvbnm,.?><{}:QERWTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()+
# words = "1234567890abcdefghijklmnopqrstuvwxyz"   # 设的密码“元素”,就是密码可能的字符
words = "abcdefghijklmnopqrstuvwxyz"
# 有36种字符,长度4的组合可能性有1679616个可能,密码9a91,就2秒
# 有26种字符,长度4的组合可能性有456976个可能
lens = 4  # 密码长度,如密码有4位
a = itertools.product(words, repeat=lens)
print('有%s种字符,长度%s的组合可能性有%s个可能' % (len(words), lens, int(math.pow(len(words), lens))))   # 次方运算
with open("pass.txt", mode="w+") as ff:    # 记录到文件里,当前目录下,w+覆盖,a追加
    for i in a:
        ff.write(''.join(i))
        ff.write("\n")   # 一行一个,加回车

在我的基础上优化后可以分享给我,谢谢

你可能感兴趣的:(python,压缩)