Python 实现专属字典生成器

举报
微软技术分享 发表于 2022/12/21 17:54:33 2022/12/21
【摘要】 编写一个密码生成工具,这里我们使用弱密码与个性化数组组合形成一个定制字典,例如收集用户的姓名,昵称,QQ号手机号等资源,然后通过Python对搜集到的数据与弱密码进行结合,从而定制出属于某个人的专属密码集,从而提高破解的成功率,一般而言使用Python可以很容易的生成专属字典。这段弱密码生成代码如下所示:import os,sysfrom random import randint,samp...

编写一个密码生成工具,这里我们使用弱密码与个性化数组组合形成一个定制字典,例如收集用户的姓名,昵称,QQ号手机号等资源,然后通过Python对搜集到的数据与弱密码进行结合,从而定制出属于某个人的专属密码集,从而提高破解的成功率,一般而言使用Python可以很容易的生成专属字典。

这段弱密码生成代码如下所示:

import os,sys
from random import randint,sample
import argparse

def Open_File(file):
    with open(file,"r",encoding="utf-8") as fp:
        for item in fp.readlines():
            data = "".join(item.split("\n"))
            yield data

# 调用: OrderDict("template.log","pass.log",world,flag)
def OrderDict(template,outfile,world,flag):
    Count = 0
    fp = open(outfile,"a+",encoding="utf-8")
    if len(flag) <= 0:
        for item in Open_File(template):
            for w in world:
                fp.write(w + item + "\n")
                fp.write(item + w + "\n")
                Count = Count + 2
    else:
        for item in Open_File(template):
            for w in world:
                for f in flag:
                    fp.write(item + w + f + "\n")
                    fp.write(item + f + w + "\n")
                    fp.write(w + item + f + "\n")
                    fp.write(w + f + item + "\n")
                    fp.write(f + item + w + "\n")
                    fp.write(f + w + item + "\n")
                    Count = Count + 6
    fp.close()
    print("[+] 总共生成弱密码条数: {}".format(Count))

# 调用: RandomDict("pass.log",world,flag)
def RandomDict(outfile,world,flag):
    Count = 0
    fp = open(outfile,"a+",encoding="utf-8")
    if len(flag) <= 0:
        for item in range(1,1000):
            random = sample(world, 2)
            fp.write(random[0]+random[1] + "\n")
            Count = Count + 1
    else:
        for item in range(1,1000):
            random = sample(world, 2)
            for f in flag:
                fp.write(random[0] + random[1] + f + "\n")
                fp.write(f + random[0] + random[1] + "\n")
                fp.write(random[0] + f + random[1] + "\n")
                Count = Count + 3
    fp.close()
    print("[+] 总共生成随机密码条数: {}".format(Count))

def Banner():
    print("  _          ____  _                _    ")
    print(" | |   _   _/ ___|| |__   __ _ _ __| | __")
    print(" | |  | | | \___ \| '_ \ / _` | '__| |/ /")
    print(" | |__| |_| |___) | | | | (_| | |  |   < ")
    print(" |_____\__, |____/|_| |_|\__,_|_|  |_|\_\\")
    print("       |___/                             \n")
    print("E-Mail: me@lyshark.com")

if __name__== "__main__":
    #关键字: world = ["wang","lyshark","1997","qew","1104"]
    #标志: flag = ["@","!","#"]
    Banner()
    parser = argparse.ArgumentParser()
    parser.add_argument("-t","--template",dest="template",help="指定一个基础模板字典.")
    parser.add_argument("-k","--keyword",dest="keyword",help="指定一些关键字,用逗号分隔.")
    parser.add_argument("-s","--symbol",dest="symbol",help="指定一些特殊符号,用逗号分隔.")
    parser.add_argument("-o","--outfile",dest="outfile",help="指定输出字典的名字.")
    args = parser.parse_args()

    if args.template and args.keyword and args.outfile:
        world = [item for item in args.keyword.split(",")]
        if args.symbol == None:
        # 使用方式: main.py -t template.log -k lyshark,wang,19981211 -o pass.log
            flag = []
            OrderDict(args.template,args.outfile,world,flag)
        else:
        # 使用方式: main.py -t template.log -k lyshark,wang,19981211 -s !,@,#,$ -o pass.log
            flag = [item for item in args.symbol.split(",")]
            OrderDict(args.template,args.outfile,world,flag)
    else:
        parser.print_help()

使用方法: -t指定模板字典,-k指定关键字序列,以逗号分隔开-s指定一些特殊符号可以不写-o指定输出后的文件名。

  • 不指定特殊字符: main.py -t temp.log -k lyshark,wang,abc,zhangsan -o pass.log
  • 指定特殊字符: main.py -t temp.log -k lyshark,wang,19981211 -s !,@,#,$ -o pass.log
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。