2012-06-22 32 views

回答

4

在很多情况下,一个简单的uniqid(mt_rand(), true)会做随机生成一个盐。结合Blowfish应该给你一个相当不错的密码哈希。

替代品是伪随机来源,例如/dev/urandomopenssl_pseudo_random_bytes()。还有一些服务可以为您生成随机数据(基于无线电主动降级)。

+0

我认为这是openssl_random_pseudo_bytes()from [link](http://php.net/openssl_random_pseudo_bytes) –

2

考虑使用随机盐代替非随机..也许你会发现一些有用的东西这篇文章http://www.gregboggs.com/php-blowfish-random-salted-passwords/

此外,在看看这篇文章http://codahale.com/how-to-safely-store-a-password/

一种方法是产生为每个用户提供独特的盐,并将该盐存储在DB中。

另一个好方法是,生成密码散列的算法必须计算超过秒的盐。更复杂的哈希算法将是 - 更多的问题将面对谁想要破解你的数据库

+0

我不明白你的意思是“必须计算超过秒的盐”。你的意思是执行时间应该超过一秒?请详细说明这一点。 – nullability

+0

@nullability是的,超过一秒执行 – Ribtoks

3

使用这条线在PHP

$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)); 
1

可以使用microtime()函数在PHP中生成强盐的人根据微秒生成一个数字,而不是秒,这使得用户几乎不可能与另一个用户产生相同的盐分。您也可以将此号码与用户的ID相乘。

也许md5(uniqid())已经足够用于你的应用。

编辑:忘记提及uniqid()功能more_entropy参数。这将较小的相同字符串的机会,即使功能运行在同一个微秒的两倍,所以编辑功能应该是这样的:

$salt = md5(uniqid($user_id, TRUE)); 
相关问题