从DB检索salt + hash以进行验证

Juk*_*dan 0 php mysql hash salt

所以我正在学习PHP并正在登录页面.我已经想出如何使用SHA256注册一个新用户来哈希$ salt + $密码.我知道有更慢的加密方法,如bcrypt,但出于学习目的,我只是使用SHA256.我的问题是,使用它加密后:

function HashPassword($password) {
  $salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)); 
  $hash = hash("sha256", $salt . $password); column
  $final = $salt . $hash;
  return $final;
}
Run Code Online (Sandbox Code Playgroud)

使用预处理语句,从数据库中检索哈希密码的最佳方法是什么,所以我可以使用这样的函数验证它?

function ValidatePassword($password, $hash_pass) {

  $salt = substr($hash_pass, 0, 64); 
  $trueHash = substr($hash_pass, 64, 64); 
  $reHash = hash("sha256" , $salt . $password); 

  return $reHash == $trueHash;
}
Run Code Online (Sandbox Code Playgroud)

egg*_*yal 5

原则是您无法检索密码; 相反,您使用相同的HashPassword函数来计算密码尝试的哈希值,然后查询数据库以查找匹配的记录.


编辑

再看一下你的HashPassword函数,我意识到你不想在其中生成随机盐,而是$salt作为一个参数; 您将根据需要传入现有数据库记录中的值,或者传入随机生成的值.

  • @Jukodan:你的盐应该和你的记录一起存放. (3认同)