2014-08-30 39 views
3
我总是使用MD5加密密码,但我读了它不应该更多的被使用,而是使用bcrypt

..Bcrypt,盐和成本是什么意思?

我使用zendframework 2,在那里我发现它描述如下bcrypt配置:

$bcrypt = new Bcrypt(array(
    'salt' => 'random value', 
    'cost' => 11 
)); 

什么是盐和什么是成本?以及它们如何被使用?

回答

7

盐是随机文本添加到要散列的字符串。例如,你不会散列my_secret_password;你哈希像1jfSLKe$*@SL$#)(Sslkfs$34:my_secret_password。其原因是,即使整个哈希密码数据库被盗,它也很难建立一个“彩虹表”来暴力破解密码。如果每个密码都有不同的盐分,那么只能使用最弱的密码(如“密码”或“123456”,您应该禁止)。

成本是运行散列多少次的度量 - 它的速度有多慢。你希望它变慢。同样,如果哈希密码被盗,这是一个冗余的安全层。它使任何暴力都变得过于昂贵。

可以读取一个很好的描述在这里:https://security.stackexchange.com/a/51983/35405

+1

所以,当在我的网站用户注册,Bcrypt将随机文本添加到他的密码, 当他再次尝试登录,我怎么能验证登录 - 密码匹配注册一个(我不知道随机盐) – darroosh 2014-08-30 20:03:31

+1

正如解释[这里](http://framework.zend.com/manual/2.0/en/modules/zend.crypt.password.html),你会使用'$ bcrypt-> verify($ password,$ storedPassword)',其中'$ password'是用户刚输入的内容,'$ storedPassword'是保存的(腌制和散列)值。 salt在创建散列时存储在返回值中,因此您不必单独存储它。 – 2014-08-30 20:06:19

+1

对不起,你没有明白你的意思:“盐在创建散列时存储在返回值中”, 未存储用户注册时创建散列的返回值...因此,在验证用户,我怎么知道盐?或者你的意思是我应该存储返回值中的盐? – darroosh 2014-08-30 20:38:58