在你们的项目中,如何对用户的密码进行散列呢?

2014-02-15 14:54:19 +08:00
 jybox
经过我的调研,下面的算法应该算是最安全也最简单的了:

sha256(sha256(passwd) + passwd_salt)

passwd_salt 是一个随机生成的 sha256 值。

调研过程: http://jysperm.me/technology/1476
3349 次点击
所在节点    程序员
6 条回复
SErHo
2014-02-15 15:01:34 +08:00
raincious
2014-02-15 15:22:09 +08:00
献丑下被骂过之后写出的代码,我现在就用它了:https://github.com/raincious/facula/blob/master/Unit/Passworder.php#L85

先用SHA512包裹着站点Salt算指定次数,然后产生一个随机Salt交给crypt混着运算Hash。保存的时候随机Salt+Hash存在数据库里。效验的时候拿随机的Salt和用户输入重新再算一次,匹配就是了,不匹配肯定有问题。

缺点是crypt的算法不同服务器的支持不一样,所以配置站点的时候得小心(所以我设定BlowFish优先级最高,确保服务器支持BlowFish就好了)。但我自己用的很舒服。

还有一个缺点就是站点Salt一旦更改,所有的密码都会失效。不过这一点正和我意嗯。
zoowii
2014-02-15 15:22:21 +08:00
和我差不多
jakwings
2014-02-15 23:01:39 +08:00
mengzhuo
2014-02-16 00:08:13 +08:00
一直用Django的,差不多就是这样的
"%s%s" % salt, sha256(salt+raw_password)
rankjie
2014-02-16 13:44:01 +08:00
一般来说做hash主要是防止在站点已被脱库的时候保护密码原文不被破解,那么采用简单sha/md5的那就不是很健壮了。加了salt再hash,要是salt存在db,那也和前一种没差。所以我选择bcrypt,你值得拥有。。。代价就是登录部分的函数处理时间基本都是三四百ms。。。

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

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

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

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

© 2021 V2EX