javascript - php 用户密码MD5加密存入数据库问题//

 手机用户2502852635_269 发布于 2022-11-28 16:41

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

10 个回答
  • 对,确实如此。

    实际上MD5加密方式现在并不安全,更好的方式是采用sha1或者使用php提供的password_hash函数

    stringpassword_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){thrownewRuntimeException('Bcrypthashingnotsupported.');}return$hash;

    同一个密文,每次生成的hash值是不同的,可以很好地避免撞库攻击等,生成的密码类似于下面这种格式

    $2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
    2022-11-28 17:18 回答
  • 顺便提醒你一下,md5很容易被反向对比出密码。

    所以你做md5的时候,最好用$md5=md5($password.$rand_str)其中$rand_str是一个该应用独有的字符串。

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

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

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

    2022-11-28 17:18 回答
  • 如果不是历史原因,php5.5以上推荐password_hash使用,如laravel

    publicfunctionmake($value,array$options=array()){$cost=isset($options['rounds'])?$options['rounds']:$this->rounds;$hash=password_hash($value,PASSWORD_BCRYPT,array('cost'=>$cost));if($hash===false){thrownewRuntimeException("Bcrypthashingnotsupported.");}return$hash;}publicfunctioncheck($value,$hashedValue,array$options=array()){returnpassword_verify($value,$hashedValue);}$password=Input::get('password_from_user');$hash=Hash::make($password);//保存数据库//对比$input='password_from_user';if(Hash::check($input,$hash)){}
    2022-11-28 17:18 回答
  • 必须啊!MD5不可逆,所以登陆时肯定要把前台的密码也加密,然后和数据库对比,才能知道密码是否相同。不然怎么对比

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

    2022-11-28 17:18 回答
  • 数据库存的就是加密后的密码。
    保证用户的信息安全,是不能够存储明文密码的,所有的验证都是用的加密后的字串

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

    2022-11-28 17:18 回答
  • 是的,但是现在好像流行用sha1加salt的加密方式

    2022-11-28 17:18 回答
  • 的确是这样的,加密的方式有很多,像加盐啊等等。。

    2022-11-28 17:18 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有