【问题标题】:CRYPT_BLOWFISH usageCRYPT_BLOWFISH 用法
【发布时间】:2012-07-22 15:41:00
【问题描述】:

我一直在研究处理用户登录密码的选项,我对如何使用 CRYPT_BLOWFISH 有一些疑问。我阅读了有关如何实现它的信息,但我想在开始使用它之前更好地理解它。

所以我打算做这样的事情:

 function genBlowfishSalt()
 {
      //return random string for Salt
 }

 $hash = crypt($password, '$2a$12$'. genBlowFishSalt());

我的问题如下:

1) '$2a$12$' 是什么?

2) 我知道在这种情况下我必须为每个用户存储盐,我想在没有自己的哈希的情况下存储它是可以接受的吗?盐会附加到散列值吗?

3) 登录后,我将如何比较散列值?

4) 我还读到了需要为每个用户存储多次迭代的概念,这对密码的散列有何影响?

谢谢!

【问题讨论】:

    标签: php login hash passwords


    【解决方案1】:

    1) 那是哈希的盐,你需要使盐更随机(EG不同的盐为每个用户提供最大的保护)

    2) 是的,您可以将盐存储在一个字段中,将加盐哈希存储在另一个字段中。

    3) 你会按照以下步骤进行

    1. 从表单中获取密码和用户名
    2. 从数据库中获取 salt,然后使用该 salt crypt() 密码字符串
    3. 您得到的新字符串(散列+加盐密码)然后将其与数据库进行比较(EG 是用户名 = xxx 和密码 = zz9zjz9)并查看是否返回任何行,如果有返回的行那么你知道这是正确的密码并登录该人。

    4) 我不确定你的意思,请详细说明!

    【讨论】:

    • 1) 如果那是哈希的盐,为什么有人总是在它前面加上那个特定的字符串?我在这里看到了一些东西,他们谈到需要在哈希 stackoverflow.com/questions/2235897/… 上加上前缀。
    • 它改变了整体的哈希值。试试吧!它用于阻止来自彩虹表的攻击,因为它需要更多的 cpu 功率
    • 4) 我不确定迭代,我只是在某处读到它是处理 crypt 时可以使用的参数。也许这意味着您可以多次散列密码?
    • 哦,所以将盐添加到哈希中是作为附加的安全层完成的,因为您正在向哈希添加完全随机的值?
    • 是的!因此,如果攻击者获取了您的数据库,他们将不得不花费更多的 CPU 能力来暴力破解哈希,这将花费非常长的时间。 4) 我还是不知道怎么回答
    猜你喜欢
    • 2011-09-26
    • 2014-09-30
    • 2013-05-11
    • 2014-04-18
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    相关资源
    最近更新 更多