javascript - php 用户密码MD5加密存入数据库问题//
怪我咯
怪我咯 2017-04-11 11:28:10
[JavaScript讨论组]

比如说用户注册后,后台给用户密码MD5加密了在存入数据库,用户在登入的时候输入的密码要与数据库保存的密码对比。我想问的是,用户登入时,后台要把密码用MD5加密后才能与数据库的密码比较吗?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(10)
PHPz

对,确实如此。

实际上MD5加密方式现在并不安全,更好的方式是采用sha1或者使用php提供的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是一个该应用独有的字符串。

这样,就算你的数据库暴露了,也不会泄露用户的密码。

这种技巧叫加盐哈希, $rand_str就是盐

大家讲道理

@娃娃脾气 说得对, 但是这还不是最安全的办法, 更安全的方案戳后面这个链接: 加盐密码哈希:如何正确使用

PHP中文网

如果不是历史原因,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)){
    
}
PHP中文网

必须啊!MD5不可逆,所以登陆时肯定要把前台的密码也加密,然后和数据库对比,才能知道密码是否相同。不然怎么对比

PHPz

如果不是历史原因,还是建议更换加密方式,低版本的话可以百度phpass类库,然后楼主问得是是否验证对吧,是的,库里查了和用户提交上来的密码,使用相同的加密方式然后对比一下就可以了

迷茫

数据库存的就是加密后的密码。
保证用户的信息安全,是不能够存储明文密码的,所有的验证都是用的加密后的字串

伊谢尔伦

对的,毕竟MD5算法是哈希算法的一种。一般情况下,前端传给后端的密码就是经过MD5加密后的密文。这样的话可能会更安全一点。不同的技术经理或经理要求可能不一样。

怪我咯

是的,但是现在好像流行用sha1加salt的加密方式

PHPz

的确是这样的,加密的方式有很多,像加盐啊等等。。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号