Python在社会工程学密码字典中的应用

社会工程学密码字典

密码字典主要有两部分:

  • 常见的默认密码和弱口令
  • 个人信息组成的密码
    通过搜索引擎和目标的社交网络可以了解他的基本信息
    假设我们的目标名字叫作张三,单独创建一个文件存放个人信息
    在这里插入图片描述
    实际操作时可以收集目标更多的信息获得正确密码的机率就会更大
    选用一个常用的弱口令密码字典,GitHub上有很多

编写密码字典使用python内置的iterable模块,常用的三个函数:

函数名作用
permutation(iterable, r)返回iterable中元素所有组合长度为r的项目序列
product(*iterables[, repeat])笛卡尔积组合
repeat(object[, times])重复元素
# -*- coding: utf-8 -*-

import itertools

def readinformationList():
    try:
        #读取信息
        informationFile = open('persion_info.txt', 'r')
        lines = informationFile.readlines()
        for line in lines:
            infolist.append(line.strip().split(':')[1])
        # print(infolist)
    except Exception as e:
        print(e + "\n")
        print("Read persion_info error!")


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


def CreatSpecialList():
    #创建特殊字符写入列表
    specialWords = "`~!@#$%^&*()?|/><,."
    for i in specialWords:
        specialList.append("".join(i))


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

#字典生成算法主体
def Combination():
    for a in range(len(infolist)):
        #把个人信息大于等于8位数的直接输出到字典
        if len(infolist[a]) >= 8:
            dictionaryFile.write(infolist[a] + "\n")
        #小于8位数的个人信息,利用数字补全到8位数输出
        else:
            needWords = 8 - len(infolist[a])
            for b in itertools.permutations("1234567890", needWords):
                dictionaryFile.write(infolist[a] + ''.join(b) + '\n')
        #将个人信息元素两两互相拼接,大于等于8位的输出到字典
        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.txt','w')
    #用户信息列表
    global infolist
    infolist = []
    #数字列表
    global numberList
    numberList = []
    #特殊字符列表
    global specialList
    specialList = []
    #读取个人信息dictionaryFile
    readinformationList()
    #创建数字列表
    CreatNumberList()
    #创建特殊字符列表
    CreatSpecialList()
    #把常见密码写入字典文件
    AddTopPwd()
    #字典生成主体,将个人信息+数字列表+特殊字符列表进行组合加入字典
    Combination()
    print('\n' + u"字典生成成功!" + '\n' + '\n' + u"字典文件名:passwords")

在这里插入图片描述
文件夹下生成password密码字典文件
在这里插入图片描述
总共有三十三万多条数据,字典部分
在这里插入图片描述

人生漫漫其修远兮,网安无止境。
一同前行,加油!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值