如何在以下代码段中验证密码

时间:2016-08-06 04:10:07

标签: php

我在这里有两个问题:

  1. 使用openssl_random_pseudo_bytes()生成随机字符串是否可以,或者仅从/dev/random直接获取字符串更好?

  2. 我已经编写了以下代码,为每个用户密码生成一个唯一的盐和盐渍哈希,现在我如何验证密码?我对如何授权感到困惑,因为由于盐的存在,哈希值是随机的。

1 个答案:

答案 0 :(得分:1)

For 1:见这里:https://security.stackexchange.com/a/101117

它完美地回答了你正在寻找的东西。

For 2:用于检查密码。首先,你需要盐来检查它,所以你需要在某处储存盐。从中做出3个功能:

function getSalt($length = 33) {
    return openssl_digest(openssl_random_pseudo_bytes($length), 'sha512')
        . openssl_digest('intercept9', 'sha512');
}

function encrypt($salt, $password) {    
    $password = md5($pass . $salt);
    return $password;
}

function verify($salt, $password, $hash) {
   return encrypt($salt, $password) == $hash;
}

$salt = getSalt();
$hash = encrypt($salt, 'root');
var_dump(verify($salt, 'root', $hash));

但是尝试依赖已经实现的密码_ *函数。