比如说用户注册后,后台给用户密码MD5加密了在存入数据库,用户在登入的时候输入的密码要与数据库保存的密码对比。我想问的是,用户登入时,后台要把密码用MD5加密后才能与数据库的密码比较吗?
比如说用户注册后,后台给用户密码MD5加密了在存入数据库,用户在登入的时候输入的密码要与数据库保存的密码对比。我想问的是,用户登入时,后台要把密码用MD5加密后才能与数据库的密码比较吗?
顺便提醒你一下,md5很容易被反向对比出密码。
所以你做md5的时候,最好用 $md5 = md5($password . $rand_str)
其中$rand_str
是一个该应用独有的字符串。
这样,就算你的数据库暴露了,也不会泄露用户的密码。
这种技巧叫加盐哈希
, $rand_str
就是盐
如果不是历史原因,php5.5以上推荐password_hash
使用,如laravel
public function make($value, array $options = array())
{
$cost = isset($options['rounds']) ? $options['rounds'] : $this->rounds;
$hash = password_hash($value, PASSWORD_BCRYPT, array('cost' => $cost));
if ($hash === false)
{
throw new RuntimeException("Bcrypt hashing not supported.");
}
return $hash;
}
public function check($value, $hashedValue, array $options = array())
{
return password_verify($value, $hashedValue);
}
$password = Input::get('password_from_user');
$hash = Hash::make($password );//保存数据库
//对比
$input = 'password_from_user';
if(Hash::check($input, $hash)){
}
如果不是历史原因,还是建议更换加密方式,低版本的话可以百度phpass
类库,然后楼主问得是是否验证对吧,是的,库里查了和用户提交上来的密码,使用相同的加密方式然后对比一下就可以了
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
对,确实如此。
实际上MD5加密方式现在并不安全,更好的方式是采用sha1或者使用php提供的
password_hash
函数在Laravel框架中就是采用
password_hash
函数对密码进行加密同一个密文,每次生成的hash值是不同的,可以很好地避免撞库攻击等,生成的密码类似于下面这种格式