密码加密与登录验证的原理是怎样的?

2016-12-30 14:57:11 +08:00
 kimwang
新人问题,大家请别笑,不是 ITer ,想撸个轻论坛,一切从概念学起。

我了解了一下,常见加密方式可能有: escape 、 md5 、 sha 、 base64
escape 和 base64 好像可逆?

那么我应该采用哪种方式为密码加密?
用户登录时验证,是对输入的密码从新加密一次,然后对比数据库已加密的字符是否一致来判断是否放行吗?

麻烦一下各位,给个思路,然后我又继续找资料学习,感谢。
12585 次点击
所在节点    PHP
54 条回复
shiji
2016-12-31 05:54:04 +08:00
@BXIA 可不是咋的,如果死活不用,这就就是个凑合着能加密的方法。根本不能防中间人
kn007
2016-12-31 10:09:53 +08:00
php 的话通过 4L 挺好的,只要你无需跟前台或其他后端程序交互,完全没必要哈希,哈希我觉得更多为了协同。
kimwang
2016-12-31 11:01:16 +08:00
@kn007 可是四楼的 password_hash 不就是创建密码的哈希吗?我的理解,哈希和加盐主要是防止被脱裤后被暴力,而我觉得这个影响极坏,所以比较重视这一块,而我完全没有实操经验,欢迎各位多多分享实战经验和个人看法。
vugusurk
2016-12-31 15:17:01 +08:00
@kimwang LZ 没啥实操经验直接用 4L 的不就行了,业界通用方案, PHP 官方推荐,还能坑你不成
johnj
2016-12-31 18:18:40 +08:00
@kimwang salt 可以是生成一段随机字符,然后跟密码一起哈希。 salt 可以保存在数据库中,也可以跟哈希值以一定规则编码在一起,就不用单独存 salt 了,用的时候再反向把 salt 从混合编码中提取出来。
mingyun
2017-01-01 19:28:22 +08:00
@kimwang
JamesRuan
2017-01-01 23:18:18 +08:00
去看看 Key derivation function
kimwang
2017-01-02 12:58:55 +08:00
@JamesRuan 谢谢,这个中文文献比较少。
JamesRuan
2017-01-02 20:26:37 +08:00
@kimwang
我写了一批文章,专门讲讲这个事:

https://zhuanlan.zhihu.com/p/24678857
kimwang
2017-01-03 19:24:36 +08:00
@JamesRuan 已拜读,感谢如此有心之人。
学习 PHP ,路漫漫其修远兮~
kimwang
2017-01-03 19:46:22 +08:00
@lisijing1221 那些所谓的“慢函数”如何理解?为什么执行得慢~
JamesRuan
2017-01-03 21:17:10 +08:00
@kimwang 本来就想写,很早就埋了坑,无非这次是机缘巧合,你这个问题给了我动力罢了
garrydzeng
2017-01-10 23:25:11 +08:00
@kimwang

1. 盐是需要存下来的,比如 bcrypt 前 22 个字符就是盐,参见 https://en.wikipedia.org/wiki/Bcrypt 的示例说明
2. MD5 破解是用彩虹表
3. 慢函数可以扛暴力破解,做到破解之后信息已经没有用了

如有错误欢迎纠正
password_hash 的 $algo 参数设为 PASSWORD_BCRYPT 即是 bcrypt
我平常也是用 bcrypt 算法
kimwang
2017-01-11 13:26:46 +08:00
@garrydzeng 谢谢介绍,我继续去了解。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/331245

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX