python安全攻防字典脚本的编写

使用python编写生成密码字典的脚本需要用到itertools模块


3个需要用的函数:

  • permutation(iterable, r):返回terble中元素所有组合长度为r的项目序列,r省略则默认取iterable中项目的数量。例如itertools.Permutations(‘abc’,3),从“abc" 中按顺序排列组合长度为 3进行输出, 即abc, acb, bac, bca, cab, cba。
  • product(*iterables[, repeat]):可以获得多个循环器的笛卡儿积。例如product(“123”,“abe”),得到的结果是la, 1b, 1c, 2a, 2b, 2c,3a, 3b, 3c。
  • repeat(object[, times]) :这个函数的作用就是重复元素,未指定times则会一直重复。例如repeat(100),即100,100, …

接下来编写一个密码字典的生成脚本,具体步骤如下。
需要的文件:person_information,TopPwd(常用密码)
person_information

目标姓名全拼:zhangwei
目标姓名简拼:zw
目标手机号码:12341564567
目标生日:19930916
目标生日(年):1993
目标生日(月/日):0916
目标QQ号:435446654
目标爱人姓名全拼:wangfang
目标爱人姓名简拼:wf
目标爱人手机号码:18945658432
目标爱人的生日:19971011
目标爱人生日(年):1997
目标爱人生日(月/日):1011

# -*- coding: utf-8 -*-

import itertools

def ReadInformationList():
    try:
        informationFile = open('person_information','r')
        lines = informationFile.readlines()
        for line in lines:
            infolist.append(line.strip().split(':')[1])     #数据处理,获取值
    except Exception as e:
        print(e + "\n")
        print("Read person_informaiton error!")

def CreateNumberList():
    #数字元素
    words = '0123456789'
    itertoolsNumberList = itertools.product(words,repeat=3)
    #利用itertools产生不同的数字排列,数字组合长度为3
    for number in itertoolsNumberList:
        numberList.append("".join(number))

def AddTopPwd():
    try:
        #读取toppwd文件,并存入paaaword字典文件
        informationFile = open('TopPwd','r')
        lines = informationFile.readlines()
        for line in lines:
            dictionaryFile.write(line)
    except Exception as e:
        print(e + "\n")
        print("Read TopPwd error!")

def CreateSpecialList():
    #添加特殊字符模块
    specialwords = '`~!@#$%^&*()_+?|/<>,.'
    for i in specialwords:
        specialList.append("".join(i))

def Combination():
    for a in range(len(infolist)):
        if (len(infolist[a]) >= 8 ):
            #个人信息大于8位的直接存储到字典
            dictionaryFile.write(infolist[a] + "\n")
        else:
            needWords = 8 - len(infolist[a])
            #个人信息不足8位的补到8位存储
            for b in itertools.permutations("1234567890",needWords):
                dictionaryFile.write(infolist[a] + ''.join(b) + "\n")

        for c in range(0,len(infolist)):
            if (len(infolist[a] + infolist[c]) >= 8):
                dictionaryFile.write(infolist[a] + infolist[c] + '\n')
                #将个人元素两两进行拼接,大于8位输入字典

        for d in range(0,len(infolist)):
            for e in range(0, len(specialList)):
                if (len(infolist[a] + specialList[e] + infolist[d] ) >= 8 ):
                    #特殊字符加到中间
                    dictionaryFile.write(infolist[a] + infolist[d] + specialList[e] + "\n")
                    #特殊字符加到尾部
                    dictionaryFile.write(infolist[a] + specialList[e] + infolist[d] + "\n")
                    #加到中间
                    dictionaryFile.write(specialList[e] + infolist[a] + infolist[d] + "\n")

    dictionaryFile.close()




if __name__ == "__main__":
    global dictionaryFile
    # 创建字典文件
    dictionaryFile = open('passwords','w')


    global infolist
    #用户信息列表
    infolist = []

    global numberList
    #数字列表
    numberList = []

    global specialList
    specialList = []

    ReadInformationList()
    #读取个人信息文件

    CreateNumberList()
    #创建数字列表
    CreateSpecialList()

    AddTopPwd()
    #常见密码写入字典

    Combination()
    #主函数

    print('\n' + u"字典生成成功!" + "\n" + '\n' + u"字典文件名:passwords")

kali下的crunch字典脚本学习

  	 min    设定最小字符串长度(必选)
     max    设定最大字符串长度(必选)
     
     oprions
     -b     指定文件输出的大小,避免字典文件过大  
     -c     指定文件输出的行数,即包含密码的个数
     -d     限制相同元素出现的次数
     -e     定义停止字符,即到该字符串就停止生成
     -f     调用库文件(/etc/share/crunch/charset.lst)
     -i     改变输出格式,即aaa,aab -> aaa,baa
     -I     通常与-t联合使用,表明该字符为实义字符
     -m     通常与-p搭配
     -o     将密码保存到指定文件
     -p     指定元素以组合的方式进行
     -q     读取密码文件,即读取pass.txt
     -r     定义重某一字符串重新开始
     -s     指定一个开始的字符,即从自己定义的密码xxxx开始
     -t     指定密码输出的格式
     -u     禁止打印百分比(必须为最后一个选项)
     -z     压缩生成的字典文件,支持gzip,bzip2,lzma,7z  

Crunch特殊字符

1、% 代表数字
2、^ 代表特殊符号
3、@ 代表小写字母
4、, 代表大写字符
特殊字符一般与参数 -t 配合使用

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值