我在login
表中有两个字段
- 密码
- 盐
我有这个小功能来生成盐
function random_salt($h_algo="sha512"){
$salt1=uniqid(rand(),TRUE);
$salt2=date("YmdHis").microtime(true);
if(function_exists('dechex')){
$salt2=dechex($salt2);
}
$salt3=$_SERVER['REMOTE_ADDR'];
$salt=$salt1.$salt2.$salt3;
if(function_exists('hash')){
$hash=(in_array($h_algo,hash_algos()))?$h_algo:"sha512";
$randomsalt=hash($hash,md5($salt)); //returns 128 character long hash if sha512 algorithm is used.
}else{
$randomsalt=sha1(md5($salt)); //returns 40 characters long hash
}
return $randomsalt;
}
现在要创建用户密码,我有以下内容
$userinput=$_POST["password"] //don't bother about escaping, i have done it in my real project.
$static_salt="THIS-3434-95456-IS-RANDOM-27883478274-SALT"; //some static hard to predict secret salt.
$salt=random_salt(); //generates 128 character long hash.
$password =sha1($salt.$userinput.$static_salt);
$salt
保存在salt
数据库的字段中,并$password
保存在password
字段中。
我的问题,在函数random_salt()
中,我有这种感觉,我只是让事情变得复杂,而这可能不会产生应有的安全盐。无论我是否朝着正确的方向前进,有人可以给我一盏灯吗?
PS我确实对crypt
功能有一个想法,就像这样。只想知道我的代码好吗?
谢谢。