最近CSDN、天涯等一大批网站帐号、邮箱以及明文密码泄漏,再次提醒大家注意密码安全。

当下比较安全的密码方案是用LastPass/KeePass之类的软件生成随机密码,然后用主密钥加密保存。但这样有个很大的缺点,就是在移动设备或公共电脑等不方便访问加密数据库的时候,随机密码则过于复杂,无法使用。

吾的解决办法就是依然用LastPass保存密码,但用单独的密码生成器来生成随机密码。

PASSWORD = getPass(password, identifier)

其中password是简单的记忆密码,identifier是各个网站和应用的标识字。然后通过不可逆的getPass方法便得到密码PASSWORD。这样即使某个网站的密码泄漏,也不会泄漏记忆密码,从而保证了其他网站密码的安全性。

##花密 getPass方法有现成的实现,就是HMAC,本文标题中的花密则是基于HMAC上的自定义算法,主要是能够生成包含大写字母的16位密码,更适合做密码使用。同时花密还提供了在线版、离线版、Userscript插件版、Chrome扩展版、Windows软件版等多个版本,当然本文也提供了CLI版本,适合在控制台上使用。

好了,闲话不多说,花密的其他版本很容易在官方主页上找到(这里),而本人提供的CLI版本在这里,需要Python 2.6+环境。

##使用方法

$ git clone git://github.com/ninehills/huami-cli.git
$ cd huami-cli
$ ./huami.py KEY
Password:
KEF2342511421312

可以结合xclip,比如

./huami.py KEY | xclip -i

便可将密码复制到X剪切板。

##其他

花密的加密办法在吾看来有几处不令人满意的地方:

  • 生成的密码不含特殊字符
  • 生成密码的位数为16位,在某些网站不能使用
  • HMAC的key和msg的概念貌似让作者给弄反了,虽然吾也不知道这样会不会对安全有影响。

所以如果不想使用他人的加密算法的话,可以自己在花密的基础上定制自己的算法,因为一切都是BSD授权的,所以尽可以自由修改。而这也是开源软件的优势所在。