前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >35行代码实现千万级别字典的快速去重

35行代码实现千万级别字典的快速去重

作者头像
Jumbo
发布2018-03-29 17:38:56
3K0
发布2018-03-29 17:38:56
举报
文章被收录于专栏:中国白客联盟

字典对于一个安全从业者的意义非常重要,尤其是渗透测试工程师,一份好的字典往往能带来意外的收获。 在当前各种裤子满天飞的环境下,快速整理有用信息并加入自己的字典已成为安全从业者的一个必备技能。 在处理大量单一字典变量的时候,我们往往会发现大量的重复,无论是什么原因造成的,对于一个强迫症来说,这是不能忍受的。 在一次hash爆破中,被爆hash类型是bcrypt,此时字典的去重工作就尤为重要了,字典不去重会严重影响爆破效率。 于是使用自己几年前写的一个基于数组遍历的字典去重工具对约1500万的一份字典进行了去重,可结果吓我一跳,整整一天一夜居然还没完成。 于是就有了下面的脚本。 在大字典中,会有各种各样的问题,比如这份字典可能是几份字典合成的,有中文、俄文、英文等等,甚至在实际操作中我发现了二进制、不可见字符串、句子等等。 这样即便去重,也仍然会有大量的无用条目在里面继续影响效率。 现实中遇到的字典一般不会超过1个G,而计算机内存却远远大于这个数字,所以一下把字典加载到内存进行处理的方式是完全可行的。 经字典完全载入内存后,利用正则匹配(这里很灵活,可以根据需求实时更改)“抓”出所有符合条件的条目,再进行去重。 数据量很大的情况下,用数组遍历的方式是无法完成工作的,这时就需要用到“哈希表”这个概念。 熟悉python我们知道,python的set的元素具有唯一性,利用该性质便可轻易达到去重的目的,最关键的是,set在cpython解释器的实现用了hashtable,所以效率奇高。 下面是一个demo,去重1500万的一个字典,消耗时间大约10s左右。

代码语言:javascript
复制
#coding=utf-8
import sys, re, os
def getDictList(dict):
   regx = '''[\w\~`\!\@\#\$\%\^\&\*\(\)\_\-\+\=\[\]\{\}\:\;\,\.\/\<\>\?]+'''
   with open(dict) as f:
       data = f.read()
       return re.findall(regx, data)
def rmdp(dictList):
   return list(set(dictList))
def fileSave(dictRmdp, out):
   with open(out, 'a') as f:
       for line in dictRmdp:
           f.write(line + '\n')
def main():
   try:
       dict = sys.argv[1].strip()
       out = sys.argv[2].strip()
   except Exception, e:
       print 'error:', e
       me = os.path.basename(__file__)
       print 'usage: %s <input> <output>' %me
       print 'example: %s dict.txt dict_rmdp.txt' %me
       exit()
   dictList = getDictList(dict)
   dictRmdp = rmdp(dictList)
   fileSave(dictRmdp, out)
if __name__ == '__main__':
   main()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 中国白客联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档