Python暴力破解密码

一、导入包

此处我们需要用到itertools和zipfile两个包

import itertools
import zipfile

我们先来简单认识一下itertools包的简单用法

digital_list=list(itertools.permutations(['0','1','2','3','4','5','6','7','8','9'],3))
d_list=[''.join(x) for x in digital_list]
print(digital_list)
print(d_list)

这里我们创建了一个digital_list列表

itertools.permutations(['0','1','2','3','4','5','6','7','8','9'],3)

上面的代码会从0-9这些数字中选取三个,形成全排列,并返回一个以三个元素为一组的列表,然后我们通过一个列表推导式,将每个元组中的三个元素拼接在一起。 

当然,我们也可以使用同样的方法,将我们的字母变成 以三个为一组的元素

alpha_list=list(itertools.permutations(['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'],3))
a_list=[''.join(x) for x in alpha_list]

我们可以用itertools.product将我们的d_list与a_list拼接起来,但是我们拼接后的结果是一个以三个数字和三个字母组成一组的元素的列表,我们同样需要用到上面的方法,将我们的数字元组和字母元组拼接起来。以下的截图为我们的一部分结果(数据太多,截不全)。

mix_digital=list(itertools.product(d_list,a_list))
mix_d=[''.join(x) for x in mix_digital]
print(mix_d)

 接下来,我们就需要用到我们的zipfile包。此时我们的同级目录下有一个加密的python.zip文件,我们使用zipfile.ZipFile的方法来读取我们的python.zip文件,此时我们只需要将我们的mix_d中的密码一个个输入测试就可以了。

f.extractall将我们的my_pwd也就是我们之前排列组合出来的密码传入,并指定我们的编码集为utf-8。如果try成功,我们就输出破解成功,解压完成,如果没成功,就继续破解

f=zipfile.ZipFile('python.zip')
for my_pwd in mix_d:
    try:
        f.extractall(pwd=my_pwd.encode(encoding='utf-8'))
        print('破解密码成功,解压完成')
    except:
        print('破解密码不正确,请继续破解')

以下为完整代码:

由于密码的排列组合数据非常巨大,我们的电脑需要跑很长时间,需要耐心等待。

import itertools
import zipfile

digital_list=list(itertools.permutations(['0','1','2','3','4','5','6','7','8','9'],3))
d_list=[''.join(x) for x in digital_list]
alpha_list=list(itertools.permutations(['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'],3))
a_list=[''.join(x) for x in alpha_list]
mix_digital=list(itertools.product(d_list,a_list))
mix_d=[''.join(x) for x in mix_digital]
f=zipfile.ZipFile('python.zip')
for my_pwd in mix_d:
    try:
        f.extractall(pwd=my_pwd.encode(encoding='utf-8'))
        print('破解密码成功,解压完成')
    except:
        print('破解密码不正确,请继续破解')

  • 15
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桜キャンドル淵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值