V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jybox
V2EX  ›  程序员

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

  •  
  •   jybox ·
    jysperm · 2014-02-15 14:54:19 +08:00 · 3467 次点击
    这是一个创建于 3944 天前的主题,其中的信息可能已经有所发展或是发生改变。
    经过我的调研,下面的算法应该算是最安全也最简单的了:

    sha256(sha256(passwd) + passwd_salt)

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

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

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

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

    还有一个缺点就是站点Salt一旦更改,所有的密码都会失效。不过这一点正和我意嗯。
    zoowii
        3
    zoowii  
       2014-02-15 15:22:21 +08:00
    和我差不多
    jakwings
        4
    jakwings  
       2014-02-15 23:01:39 +08:00
    mengzhuo
        5
    mengzhuo  
       2014-02-16 00:08:13 +08:00   ❤️ 1
    一直用Django的,差不多就是这样的
    "%s%s" % salt, sha256(salt+raw_password)
    rankjie
        6
    rankjie  
       2014-02-16 13:44:01 +08:00 via iPhone   ❤️ 1
    一般来说做hash主要是防止在站点已被脱库的时候保护密码原文不被破解,那么采用简单sha/md5的那就不是很健壮了。加了salt再hash,要是salt存在db,那也和前一种没差。所以我选择bcrypt,你值得拥有。。。代价就是登录部分的函数处理时间基本都是三四百ms。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1216 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 23:18 · PVG 07:18 · LAX 15:18 · JFK 18:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.