几个月前产生一个想法,实现一个字典生成器,可能你会觉得很简单的一个事情吧,那继续往下看,我想实现的字典生成器需要的功能!
-
1.收集目标相关信息字典,按行写入一个oldpass.txt文本(手工),再按行拆分读取文本写入oldpassdict列表并去重(代码)
-
2.收集常用英语单词字典(两个字符及以上),按行写入english.txt文本(按字母排序),按行拆分读取文本写入englishdict列表并去重(代码)
-
3.收集常用汉字拼音字典,按行写入pinyin.txt文本(按字母排序),按行拆分读取文本写入pinyindict列表并去重(代码)
-
a.按数字、字母、其他字符拆分,写入
element_num_str_oth
列表并去重,并且提取字符写入element_str
列表并去重 -
b.
取出element_str
列表和englishdict
列表进行匹配,匹配出单个英文单词,并写入element_english
列表并去重 -
c.取出
element_str
列表和pinyindict
列表进行匹配,匹配出单个拼音单词,并写入element_pinyin
列表并去重 -
e.合
并element_num_str_oth
列表、element_english
列表、element_pinyin
列表到element_all
列表并去重
-
a.element列表写入文件newpassdict1.txt文件
-
b.element列表中两元素组合写入到newpassdict2列表并去重写入newpassdict2.txt文件
-
c.element列表中三元素组合写入到newpassdict3列表并去重写入newpassdict3.txt文件
以上是我想法的一个提纲,你可能看者有点糊涂,我具体解释下:
不知道你有没有发现一般人设置密码有一个特点,“组合密码”,他会组合他熟知的信息,如一个叫王小东生于1991年5月6日的人,他密码设置为wangxiaodong19910506或wxd19910506,再比如一个人他的所有密码都有一个相同的头部angelin,比如他在90sec注册账号他密码就是angelin90sec,在baidu注册账号就是angelinbaidu,例不多举。 再说说我想的工具实现,首先这个工具需要3个数据源:
- 1.当然是你收集到的数据,比如:用户名(包括微博链接中 http://weibo.com/90sec 中90sec这样的信息) ,密码,生日,昵称,手机号等等他一切可能用于他密码组合中的信息,按行写入一个文本,这就是第一个数据源。
- 2.第2个数据源,常用中文拼音如:yang、du、li、wang等。
- 3.第3个数据源,常用英文数据源(同拼音)
以上是数据源的准备
下面是重点:
关于智能识别,拆分信息得到数据元素,拆分元素有3种拆法:
- 1.按数字、字母、特殊字符拆分,如:wangxiaodong19910506!@#就被拆分为3个元素wangxiaodong和19910506和!@#(当然还可以对年份和日期进行细分如:19910506可拆分为1991、0506、199156、910506、9156)
- 2.按拼音拆分,如wangxiaodong10010506可拆分为wang、xiao、dong(去掉非字符,当然对于非主流密码如:w4n7这样的字符无能为力)。
- 3.按英文拆分,同上。
大家可能觉得很简单,其实不然,第1种拆分实现很容易,第2种关于pinyin分词的识别,如果一味的和数据源2进行匹配的话错误率会很高,如wanganan的拆分就有好几种wang、an、an|wan、gan、an|wang、a、nan|wan、gan、an等好多种拆分方法,算法实现就需要这样(当然是我个人的想法,你也可以有更好的算法,如果直接有现成的模块那就酷毙了)
有没有一点学习数据结构时候的感觉。然后就是第3种,和拼音同上,英语错误率会比拼音还高,还复杂,因为大家都知道拼音有声母韵母所以有些字母不可能作为组合如ng所以拆分会简单些,但是英文的组合可就多了,所以正确的识别和拆分难度会很大 最后就是把拆分好的数据元素进行组合,组合也有很大的技巧,怎样组合才能达到最大成功率。
当然以上只是我的一些认识,对于密码设置的一些惯性行为分析,还有很多,通过这些惯性行为分析来生成字典,将达到意想不到的效果,比如一般人有这样的一个惯性密码设置行为,一般他会有几个密码(一般2-4种),一种是比较重要账号密码,一种是一般密码等,密码复杂度也会有所不同,密码之间也会有很大的关系,可能一般密码就是重要密码的一部分,所以字典的生产也应该做出相应的变化。
最后为什么我要写这个呢,就是假期太懒本打算实现的,但是基本都lol了,所以发出来和大家讨论,忘勤快的程序员实现下。(然后我捡源码修改,加大效率,偷笑!!!)