Php 如何生成用于散列密码的随机salt

Php 如何生成用于散列密码的随机salt,php,hash,passwords,salt,saltedhash,Php,Hash,Passwords,Salt,Saltedhash,可能重复: 我想生成一个随机salt,然后将其与密码一起存储在用户数据库中。我想是这样的 $salt = //random salt code $hpassword = crypt($password,$salt) 尝试对现有字段(如用户名)进行散列,并将其用于salt 试试这里:5.5版PHP将内置对BCrypt的支持,函数密码\u散列()和密码\u验证()。对于PHP版本5.3.7和更高版本,存在一个,在那里您可以找到如何使用函数mcrypt\u create\u iv()创建salt的

可能重复:

我想生成一个随机salt,然后将其与密码一起存储在用户数据库中。我想是这样的

$salt = //random salt code
$hpassword = crypt($password,$salt)

尝试对现有字段(如用户名)进行散列,并将其用于salt


试试这里:

5.5版PHP将内置对BCrypt的支持,函数
密码\u散列()
密码\u验证()
。对于PHP版本5.3.7和更高版本,存在一个,在那里您可以找到如何使用函数
mcrypt\u create\u iv()
创建salt的良好实现,请参见第86行和第121行

因为这个兼容包,你也应该直接考虑使用这个函数,而不是自己编写,这里你可以找到一个。尤其是为BCrypt创建salt是一件棘手的事情,而且可能会犯很多错误


另外,salt应尽可能随机(从操作系统的随机源读取),因为这是在确定性计算机上使其唯一且不可预测的最佳方法。

crypt
对salt值有非常具体的要求。你想使用什么样的散列?我听说bcrypt是最好的,所以我猜?有些人说你不应该使用现有的字段,而应该使用随机的salt:其他人不同意:)如果密码足够强大(递归散列),彩虹表将变得无用。(另一方面,如果您存储的盐被破坏,如果您使用的是弱算法,请与您的密码说再见)……在将现有字段用作盐之前,先用您自己的算法对其进行置乱怎么样?