扫码关注官方订阅号
比如说用户注册后,后台给用户密码MD5加密了在存入数据库,用户在登入的时候输入的密码要与数据库保存的密码对比。我想问的是,用户登入时,后台要把密码用MD5加密后才能与数据库的密码比较吗?
走同样的路,发现不同的人生
对,确实如此。
实际上MD5加密方式现在并不安全,更好的方式是采用sha1或者使用php提供的password_hash函数
password_hash
string password_hash ( string $password , integer $algo [, array $options ] )
在Laravel框架中就是采用password_hash函数对密码进行加密
$cost = isset($options['rounds']) ? $options['rounds'] : $this->rounds; $hash = password_hash($value, PASSWORD_BCRYPT, ['cost' => $cost]); if ($hash === false) { throw new RuntimeException('Bcrypt hashing not supported.'); } return $hash;
同一个密文,每次生成的hash值是不同的,可以很好地避免撞库攻击等,生成的密码类似于下面这种格式
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
顺便提醒你一下,md5很容易被反向对比出密码。
所以你做md5的时候,最好用 $md5 = md5($password . $rand_str) 其中$rand_str是一个该应用独有的字符串。
$md5 = md5($password . $rand_str)
$rand_str
这样,就算你的数据库暴露了,也不会泄露用户的密码。
这种技巧叫加盐哈希, $rand_str就是盐
加盐哈希
@娃娃脾气 说得对, 但是这还不是最安全的办法, 更安全的方案戳后面这个链接: 加盐密码哈希:如何正确使用
如果不是历史原因,php5.5以上推荐password_hash使用,如laravel
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)){ }
必须啊!MD5不可逆,所以登陆时肯定要把前台的密码也加密,然后和数据库对比,才能知道密码是否相同。不然怎么对比
如果不是历史原因,还是建议更换加密方式,低版本的话可以百度phpass类库,然后楼主问得是是否验证对吧,是的,库里查了和用户提交上来的密码,使用相同的加密方式然后对比一下就可以了
phpass
数据库存的就是加密后的密码。保证用户的信息安全,是不能够存储明文密码的,所有的验证都是用的加密后的字串
对的,毕竟MD5算法是哈希算法的一种。一般情况下,前端传给后端的密码就是经过MD5加密后的密文。这样的话可能会更安全一点。不同的技术经理或经理要求可能不一样。
是的,但是现在好像流行用sha1加salt的加密方式
的确是这样的,加密的方式有很多,像加盐啊等等。。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
对,确实如此。
实际上MD5加密方式现在并不安全,更好的方式是采用sha1或者使用php提供的
password_hash函数在Laravel框架中就是采用
password_hash函数对密码进行加密同一个密文,每次生成的hash值是不同的,可以很好地避免撞库攻击等,生成的密码类似于下面这种格式
顺便提醒你一下,md5很容易被反向对比出密码。
所以你做md5的时候,最好用
$md5 = md5($password . $rand_str)其中$rand_str是一个该应用独有的字符串。这样,就算你的数据库暴露了,也不会泄露用户的密码。
这种技巧叫
加盐哈希,$rand_str就是盐@娃娃脾气 说得对, 但是这还不是最安全的办法, 更安全的方案戳后面这个链接: 加盐密码哈希:如何正确使用
如果不是历史原因,php5.5以上推荐
password_hash使用,如laravel必须啊!MD5不可逆,所以登陆时肯定要把前台的密码也加密,然后和数据库对比,才能知道密码是否相同。不然怎么对比
如果不是历史原因,还是建议更换加密方式,低版本的话可以百度
phpass类库,然后楼主问得是是否验证对吧,是的,库里查了和用户提交上来的密码,使用相同的加密方式然后对比一下就可以了数据库存的就是加密后的密码。
保证用户的信息安全,是不能够存储明文密码的,所有的验证都是用的加密后的字串
对的,毕竟MD5算法是哈希算法的一种。一般情况下,前端传给后端的密码就是经过MD5加密后的密文。这样的话可能会更安全一点。不同的技术经理或经理要求可能不一样。
是的,但是现在好像流行用sha1加salt的加密方式
的确是这样的,加密的方式有很多,像加盐啊等等。。