使用hash_hmac在php中安全密码

时间:2011-08-29 11:20:56

标签: php mysql hash

我刚从这个网站获得一个功能,描述了如何使用哈希生成安全密码。 功能如下:

function hash_password($password, $nonce) {
  global $site_key;
  return hash_hmac('sha512', $password . $nonce, $site_key);
}

我正在使用此功能,如

$salt = sha1(rand()); 
$salt = substr($salt, 0, 4); 
$site_key="site.com";
$pass=hash_password($pass,$salt);

每次都会生成随机文本。 但是我无法验证数据库中的密码,因为存储了数据库密码,每次都会生成随机文本。

我想知道如何使用此功能

  1. 在创建用户时将密码存储在数据库中
  2. 登录时从数据库验证密码
  3. 还有其他安全方式吗?

    由于

2 个答案:

答案 0 :(得分:2)

您需要将随机字符串(我假设的$nonce)存储在数据库中作为数据的一部分,以及生成的哈希值。否则,您根本没有足够的信息来验证密码。

答案 1 :(得分:-2)

将随机生成的字符串与密码一起存储到db上的用户行中,或者对salt进行硬编码,并始终使用相同的盐,而不是每次更改它。 如果你生成一个新的盐,那么每次计算时哈希都会改变(因为它是一个随机值,你无法将它取回...)。
那么,为什么不是一个简单的MD5?

$pass = md5( $pass.$site_key );

$pass = md5( $pass.$site_key );