Python 暴力破解密码字典生成代码,轻便,少占资源

        在开发密码破解程序是,一定会遇到的问题就是密码字典的实现方式。目录了解到的方法有两种。

        一种是预先存好的密码字典文件,在暴力破解时,随着位数的增加,必然会需要有多个大小以G计算的字典文件。文件太大,还不能打开。数量过多,占用大量电脑存储空间。

        另一种方式,程序中用如下方式实现,  for password in itertools.product(chars, repeat=length):随着破解位数,字符类型的增加,会需要占用大量的内存。最终必然会达到极限,造成系统崩溃。还有一个缺陷就是,程序流程被固定死,一旦循环过程中途停止,就还需要再从头开始了,效率低下。

        下面的代码思路,是按照进位制的思想,对密码生成过程进行了简化。将密码字符集合总数看做是进制数,对当前正在使用的密码数组序号按新进制进行加一运算。最后按序号列表去密码字符集合提取最终生成的密码。这样,程序占用空间不大,也不需要存储字典文件。程序可以中途停止,记录当前序号,就可以下次运行时,找到断点再继续运行。

        代码如下

import array as arr

def gen_code(pass_data,repeat_num):
    max_num = len(pass_data)    #进制数
    cur_index_ar = arr.array('i', [])   #当前数字编号数组
    max_index_ar = arr.array('i', [])   #最大数字编号数组
    cur_index_ch_ar = arr.array('u', [])   #当前真实密码数组
    for i in range(repeat_num):
        cur_index_ar.append(0)
        max_index_ar.append(max_num-1)   #最大值数组
        cur_index_ch_ar.append(pass_data[ cur_index_ar[0]])

    #当前密码
    cur_passwd_str = ''.join(cur_index_ch_ar)
    #总数记录
    total_count = 0

    while (max_index_ar!= cur_index_ar ):
        for i in range(repeat_num):
            if (cur_index_ar[repeat_num-i-1] == max_num-1):
                #应该进位了,归零
                 cur_index_ar[repeat_num-i-1] = 0
            else:
                #不需要进位,只加一
                 cur_index_ar[repeat_num - i-1] += 1
                # 没有进位,退出循环
                 break
        total_count += 1

        for i in range(repeat_num):
            cur_index_ch_ar [i] =pass_data[cur_index_ar[i]]

        print((cur_index_ar))
        cur_passwd_str = ''.join(cur_index_ch_ar)
        #密码生成,可以在这里加入破解函数
        print(cur_passwd_str)
    #打印总数,用来检查
    print("count = {}".format(total_count))

if __name__ == '__main__':
   #密码来源,以纯数字为例
    pass_data = "0123456789"
   #密码长度,可以修改
    repeat_num =4
    gen_code(pass_data,repeat_num)

        希望能对大家再做密码破解程序,有一定帮助。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生成WiFi密码字典Python代码如下所示: ```python import itertools as its words = '0123456789#%^&' # 密码的字符集,可以根据需要自行修改 r = its.product(words, repeat=8) # 生成8位密码,根据实际情况进行调整 with open("pwd.txt", 'a') as dic: # 密码字典的存储路径和文件名,可以根据需要修改 for i in r: dic.write(''.join(i)) dic.write(''.join('\n')) print('密码本生成完成') ``` 这段代码使用了`itertools`模块来生成密码字典。你可以根据需要修改`words`变量来定义密码的字符集,然后通过`its.product`函数生成所有可能的密码组合。最后,将生成的密码写入到指定的文件中。请注意,生成密码字典可能会非常大,所以建议提前准备好足够的存储空间。 #### 引用[.reference_title] - *1* *3* [用python进行wifi密码生成](https://blog.csdn.net/weixin_30291791/article/details/98918713)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [python wifi密码字典](https://blog.csdn.net/qq_57603737/article/details/128158281)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值