我在这里有两个问题:
使用openssl_random_pseudo_bytes()
生成随机字符串是否可以,或者仅从/dev/random
直接获取字符串更好?
我已经编写了以下代码,为每个用户密码生成一个唯一的盐和盐渍哈希,现在我如何验证密码?我对如何授权感到困惑,因为由于盐的存在,哈希值是随机的。
答案 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));
但是尝试依赖已经实现的密码_ *函数。