PassGen

密码生成器的项目地址在此:https://github.com/0xHJK/passgen

密码生成器的DEMO在此:http://pass.github.tk

写密码生成器的想法源于

  1. 帮助自己找回密码
  2. 帮助别人找回密码

使用方式

可以直接使用DEMO提供的地址生成,输入信息会生成一个压缩包,里面是一个密码字典。

如果不放心的话,也可以下载源代码,在本地执行。项目已经用Docker打包,非常方便:

1
2
git clone http://github.com/0xHJK/passgen
cd passgen && bash rock.sh

用浏览器打开http://localhost:5000/

可以根据需要自行修改配置。

密码策略

主要的密码策略:

  • 常见的默认口令(身份证/学号/工号等)
  • 数字口令(手机号/QQ/生日等)
  • 字母+数字
  • 常见弱口令
  • 数字+字母
  • 字母+数字+特殊字符

数字主要来源于填写的手机号/QQ/生日等,和常见的数字组合(123/321/111等)。字母主要来源于填写的姓名/ID等,和常见的字母组合(qq/a/abc等)。

TA信息表示与目标用户有亲密关系的人,可能是亲人/男女朋友等。如果填写了TA的信息,则会增加一些含有love/520/ai等关键字的密码。

权重和长度

密码生成器本质上是根据一定的权重进行排列组合。权重是我根据分析泄露的密码库得到的,不是特别严格,有主观成分在。

每个字符串在生成的时候都会带一个权重信息,组成一个tuple,形如(1, ‘wdc’)。权重信息代表了这个字符串出现的频率,数字越小,出现频率越高,在结果字典里越靠前。最终密码权重等于组成该密码的各项字符串权重之积。

除了权重之外,最终在生成密码字典的时候还会对密码长度进行控制,把不符合要求的密码剔除。

其它

为了方便交互,我做了一个Web页面,使用了Flask作为Python的Web框架,用于处理http请求。在后端接收到信息之后,首先会对信息进行处理和过滤。然后把信息传给生成密码的模块,在密码生成以后,对生成的文件进行压缩,返回给用户。

为了方便部署,在以上基础上用Docker打包了一下,可以一键部署。