【发布时间】:2011-08-14 22:16:38
【问题描述】:
我正在尝试为我的网站创建一个或多或少安全的登录系统,我没有太多时间来保护东西,所以我边走边学。想听听一些关于以下哪个更好以及为什么的观点。 (或者我在某个地方犯了错误?)
$staticsalt = '$%*#)$*)^A#$#543667ggfdf\#$%x';
$random = md5(uniqid(mt_rand(), true));
$salt = hash('sha512',$random.$_POST['password'].microtime().$staticsalt);
或者(不需要在数据库中使用 $salt...)
$password = crypt($_POST['password'], '$2a$12$'.$salt);
或者(我也需要数据库中的 $salt...)
$password = hash('sha512',$salt.$_POST['password']);
【问题讨论】:
-
您是否打算存储要添加的
microtime(),以便将其添加回您的密码检查中? -
不,我不需要,第一种情况生成的 $password 已经有盐的副本(即检查你只需要 $password = crypt($_POST['password'], $password); ),第二种情况 $salt 为每个用户存储在数据库中。
-
从这似乎表明,如果您不保存生成的
microtime()值,您将永远无法检查生成的哈希值,包括它。您必须能够重建整个输入。 -
@Jared 他正在使用
microtime作为随机发生器生成 salt。起初我也忽略了这一点...... -
您可以使用mcrypt_create_iv 生成随机盐。它使用来自
/dev/random或/dev/urandom的数据。
标签: php security hash salt bcrypt