看了@jinyue524 同学的帖子: https://www.v2ex.com/t/211811
想起自己以前也写了一个密码管理器,不过代码就一直扔在GitHub没有管了。现在稍微改了一下发上来看看有没有人感兴趣。
GitHub地址: https://github.com/zeruniverse/Password-Manager
与@jinyue524 同学的实现差别:
1.没有PIN,只有登陆密码,AES加密以登陆密码为key
2.服务器端储存密码签名,不储存密码
3.AES加密在浏览器端做,服务器无法解密(具体机制下面介绍)。这也意味着忘记登录密码就和数据说bye-bye了
4.自豪地采用银河系最佳编程语言PHP
5.前端很难看,会写PHP的C++程序员不是好前端
下面介绍实现逻辑:
首先有两个不同的SALT,salt1和salt2
密码签名:sha512(登录密码+salt1)
AES密钥:sha512(登录密码+salt2)
AES密文,iv及crypto-js产生的salt上传服务器
注册或登录时浏览器提交密码签名,将用户输入的密码加密后存在sessionstorage里,服务器传回数据后计算AES密钥解密,因为sha512不可逆,因此签名无法算回密码。
CRYPTO-JS能将密钥转化为一个256位的key
Wikipedia说sha512和aes256在可预见的未来都是安全的
服务器端还做了一个自己写的加密(可能是哪抄的?忘了)再存入数据库,目的是隐藏AES特征。如果数据库被hack,代码没被脱裤的话看不出是aes加密
为了防止社工,密码库内账号密码都作aes加密,服务器端只以id区分。
修改登录密码目前的做法是浏览器扒下所有数据解密然后用新密钥加密后传回服务器,速度较慢
已经实现备份功能,但恢复备份功能没时间做,如果用的人多的话下个版本再加入吧
刚才自己机子上测了,明天搭个demo server。
有兴趣的同学可以自己搭着玩(用到了PDO,所以要PHP5),如果有逻辑漏洞请一定要告诉我。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.