WEB安全大作业:口令分析

本学期WEB安全课上的一个大作业,虽做得一般(很渣),但是本着记录的目的,将本次大作业及个人所作的工作贴在这里。

大作业内容:

源数据:163,LinkedIn,Yahoo数据库泄露的密码。

要求

1. 基础分析:包括密码构成元素分析,键盘密码模式分析,日期密码及其格式分析,拼音使用统计分析,英文单词的使用统计

2. 基于分析结果,编写口令字典生成器

3.(可选)基于分析结果,采用传统方式(PCFG/Markov)或机器学习算法对口令的安全性进行分析和评估,并编程实现。

我的任务:

识别密码库中的拼音并进行统计分析。


以上就是本次大作业内容,我采用的是Python语言,利用Pandas库中的Series,DataFrame格式以及正则表达式,进行了程序的编写与实现。

程序源代码:

https://github.com/AndyLauCD/python/blob/master/%E9%99%88%E8%BF%AA_yahoo%E6%8B%BC%E9%9F%B3%E5%88%86%E6%9E%90%E4%BB%A3%E7%A0%81_161012.py


本次大作业最主要的问题就是判断一段字符是否为拼音,主要算法参考(基本等同)下面网址下的Generic Human的回答:

http://stackoverflow.com/questions/8870261/how-to-split-text-without-spaces-into-list-of-words

这是一个非常精妙的算法,利用常用英文单词字频字典,利用加权与Zipf定律进行单词的分割。而我将字典换成了中文拼音,由于暂没有中文拼音使用词频的统计,故使用短拼音权重大于长拼音(如pin权重大于ping)进行分割,进行统计、分析。

这个本次作业的精髓所在,其也可以用在英文使用统计,但是由于时间限制,小组内其他优秀的成员做了这一部分,以后有机会我可以继续进行分析统计画图。

统计结果主要如下所示:

统计 163 LinkedIn Yahoo
总密码数量 3727349 1000000 453492
总拼音数量 1287316 249107 89916
top20 a a a
wo e m
ai m e
li ma o
ni o ma
wang ri ri
xiao mi me
yu la mi
wei li sa
zhang ka la
shi ni er
yang da da
liu na ka
ma ta mo
chen ca ne
hao le ni
wu sa ta
jia an na
jian ba de
yi mo an

另外,本算法存在一些中英文识别问题,比如‘a’,根据用户习惯很难判断属于单词还是字母。更有甚者,“summer”可以理解为‘su’,'m','m','er'四个中文拼音,暂时没有合适的解决办法。留待以后进行思考。

你可能感兴趣的:(网络安全)