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

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

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

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

麻烦一下各位,给个思路,然后我又继续找资料学习,感谢。
12542 次点击
所在节点    PHP
54 条回复
crab
2016-12-30 16:23:21 +08:00
好多都是 sha1.返回公钥或者内置固定公钥。
lisijing1221
2016-12-30 16:26:41 +08:00
@kimwang 就是比如 你的密码进行 md5 散列之后,会得到一个固定的值,虽然这个值不能逆向,但是只要你有足够的数据,就能直接索引了,加盐就是稍稍阻止一下这个过程
kimwang
2016-12-30 16:33:50 +08:00
@crab
http://blog.coderzh.com/2016/01/10/a-password-security-design-example/
找了一篇文章,跟你说的思路相同的。
kimwang
2016-12-30 16:37:41 +08:00
@lisijing1221 明白,还有个问题,如果盐值随机,那么验证的时候怎么跟生成的时候一样?( 19 楼)
ZSeptember
2016-12-30 16:42:06 +08:00
@wy315700 仔细想想确实是,但是其他的也一样的了。只要被拖库了,密钥都是明文的。
lisijing1221
2016-12-30 16:49:29 +08:00
@kimwang 盐值 的话 是可以存在同一个库里面,当然也可以分库, MD5 的彩虹表很少有计算非常长的字符串的,因为穷举非常长的字符串特别耗费时间,盐值足够随机足够长就可以了,其实存哪里不是很有必要考虑
hahaDashen
2016-12-30 16:52:34 +08:00
各位大佬方法都好多 我一般写小程序就是先验证字符串是否有特殊字符 有就返回错误 然后没有的话就 md5 后存数据库 登录就把用户输入的密码 md5 后和数据库的对比 通过后存个 SESSION 存个 Cookies 两边一边一个随机密钥 判断的时候首先判断服务器端和客户端的 Cookies 是否存在 如果不存在肯定是没有登录 存在的话就验证两面的密钥 一样就代表登录 不一样就清空然后跳转到登录界面 各位大佬轻喷 用习惯这种做法了 有什么不对的还望指出
tabris17
2016-12-30 16:56:09 +08:00
建议先搞清楚编码、散列、加密的区别
lynnX
2016-12-30 16:57:35 +08:00
"用户登录时验证,是对输入的密码从新加密一次,然后对比数据库已加密的字符是否一致来判断是否放行吗? " 一般来说 就是这样 就是一个密码的生成过程 我现在是这样的处理的 根据用户注册的主键 ID 和密码 按照一定方式混合之后去加密 登录的时候 对密码按照我的加密方式加密之后和数据库对比
lisijing1221
2016-12-30 16:59:13 +08:00
@kimwang 彩虹表不会计算特别长的字符串,比如你的密码+盐值是 64 的长度,那么彩虹表的计算就穷举 64 位长的所有字符组合,这就非常恐怖耗时间了,所以盐值足够随机,足够长就 ok 了
monkeyk
2016-12-30 17:13:03 +08:00
来, 我给你一套完整方案, 专做移动安全的
woostundy
2016-12-30 17:41:33 +08:00
escape 和 base64 不是加密,是混淆, md5 和 sha 是哈希,登录密码一般就是比对哈希值。
t6attack
2016-12-30 17:42:32 +08:00
腾讯、京东,是 RSA 。
如果你有意留存一份用户密码明文数据,那就 RSA 一下。私钥自己收好。
xavierskip
2016-12-30 19:51:46 +08:00
再说一遍 MD5 不是加密算法,用户口令也不需要加密。那叫散列、哈希、摘要算法。

至于保持用户登录状态,一般都是通过 cookie 存储 session token ,一般的 web 框架都会有相应的处理功能。
sununiq
2016-12-30 20:01:08 +08:00
单向散列,加盐
kimwang
2016-12-30 22:53:19 +08:00
@xavierskip 明白,我有些概念名词和功能可能会说错,会抓紧学习。
yansyuei
2016-12-30 23:08:12 +08:00
md5 简单密码的会被暴力破解 建议
mcfog
2016-12-30 23:53:10 +08:00
一定自己手动加盐的话建议 hmac
Ultraman
2016-12-30 23:57:54 +08:00
想起来三周前偶然听了一节密码学选修课,,,
RqPS6rhmP3Nyn3Tm
2016-12-31 04:44:44 +08:00
@shiji 看到中国特色笑出声,这么麻烦直接上 SSL 多好……
公私钥用错地方了喂

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

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

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

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

© 2021 V2EX