0

我正在阅读有关保护密码的内容,并希望获得有关我的代码是否正确的反馈。我正在尝试使用河豚并crypt()一起防止任何人解密密码。另外,我有一个问题。当我存储密码时,我假设我还必须存储变量$string,以便在用户登录时再次使用它来验证用户,对吗?

function unique_md5() {
  mt_srand(microtime(true)*100000 + memory_get_usage(true));
  return md5(uniqid(mt_rand(), true));
}

//unique_md5 returns a random 16 character string

$string = '$2a$07$' . unique_md5();

$password = 'password';

$password = trim($password);

$protected_password = crypt($password, $string); 

//then store the variables $string and $protected_password into the database
4

2 回答 2

3

Blowfish 需要一个 22 个字符的字符串作为它的盐(不包括类型和成本参数)。MD5 返回一个32 个字符的字符串,它不被crypt_blowfish. 使用适当的盐。

于 2012-09-02T20:16:54.017 回答
2

不,您不需要将盐与加密密码一起存储,因为加密的密码会返回给您,并且盐已经预先添加。当您验证明文密码是否与加密密码匹配时,您只需检查是否$crypted_password == crypt($plaintext_password, $crypted_password).

于 2012-09-02T20:17:34.203 回答