做个笔记吧,最近毕设项目进展到了登录注册,正好要考虑考虑加密的问题,于是就有了这篇笔记 :)
参考:
正文
这次正文来得真快。
按照整个流程来说
注册:
- 用户填写账号密码,点击注册
- 前端使用一个固定的salt值拼接到密码上
- 前端使用md5加密拼接后的密码
- 把拼接加密后的内容发送给后端
- 后端再随机生成一个salt值,再次拼接到密码上
- 后端把密码和那个随机生成的salt值都存到数据库里
登录:
- 用户提交密码,
- 前端使用一个固定的salt值拼接到密码上
- 前端使用md5加密拼接后的密码
- 把拼接加密后的内容发送给后端
- 后端从数据库里取出账号对应的密码 和 注册时生成的salt值
- 匹配 数据库中的密码 是否等于 前端传递的密码+salt值
关于加salt 与不加salt的区别
非加盐值MD5等都可以通过大型的密码(如彩虹表)表进行对比解密,所以相对而言相当的轻松,而带有加盐值的密文就相对而言复杂的多,现在的MD5表大概是260+G,如何加盐值的可能性有10000个,那么密码表的应该是MD5 size*10000,就可以解密出原MD5表能够解密的密码了,一些网站也提供了对应的salt解密,但是测试以后效果并不是非常好,如常规的admin888也未解密出,实在是遗憾,毕竟MD5本是不可逆的,带入随机值解密出最终密码的可能性就更低了,至少是相对大多数人而言的。
如何确定salt值
这个就不需要我说了吧,salt值都是可以自己定的。
const salt = 'HappySalt'
复制代码