• “夏季第一瓜”竟是它! 2019-05-19
  • 魏占军的专栏作者中国国家地理网 2019-05-19
  • 不能让美国沾到便宜。美国沾了便宜就会扩充海军舰队,升级核武库。 2019-05-16
  • 外交部:胁迫中方放弃固有权利是徒劳的 2019-05-15
  • 统计局:5月份经济运行主要指标呈现五大特点 2019-05-07
  • 三星Gear S4智能手表曝料:支持LTE 金色配色三星GearS4智能手表曝料-手机行情 2019-05-07
  • 希望不是拿混吃等死做文章 2019-05-02
  • “2017最具体育活力城市排行榜”Top100发布成都连年提升 青岛首进前十 2019-05-02
  • 北京阅读季·书香企业建设研讨会在京举行 2019-04-30
  • 朔州市图、应县图书馆获“国家一级” 2019-04-30
  • 草民早就说过,如果只讲发展就能解决所有问题,那么发展马克思主义也太容易了。爱因斯坦的相对论超越了牛顿力学,但相对论适应不同的时空。 2019-04-13
  • 广州拟增38家长护险机构 白云海珠分布最多 2019-04-13
  • 李劭凯:今天我们为什么读《孟子》 2019-04-12
  • 河北省盐山县校园舞龙迎端午 2019-03-31
  • 你反来复去说“客观事实及其规律”,自己数一下,都说了几遍了,还不是老年痴呆?要你解释一下什么是“客观事实”,又装聋作哑。 2019-03-26
  • 设计、网站、推广
    始于2004年
    当前位置:双色球99%彩经网杀号 > 网站安全

    怎么用大数据分析彩票:网站安全 PHP中的密码如何加密

    双色球99%彩经网杀号 www.icyhd.net 发表日期:2018-11-5 作者来源:派谷网络 浏览次数:

    层出不穷的数据库安全事件对用户会造成巨大的影响,因为人们往往习惯在不同网站使用相同的密码,一家“暴库”,全部遭殃!
    一般的解决方案。
    1、将明文密码做单向hash
    $password = md5($_POST["password"]);


    2、密码+salt后做单向hash,PHP内置了hash()函数,你只需要将加密方式传给hash()函数就好了。你可以直接指明sha256, sha512, md5, sha1等加密方式
    <?php
    function generateHashWithSalt($password) {
     $intermediateSalt = md5(uniqid(rand(), true));
     $salt = substr($intermediateSalt, 0, 6);
     return hash("sha256", $password . $salt);
    }
    ?>


    单向哈希算法有一个特性,无法通过哈希后的摘要(digest)恢复原始数据,常用的单向哈希算法包括SHA-256,SHA-1,MD5等。例如,对密码“passwordhunter”进 行SHA-256哈希后的摘要(digest)如下:
    “bbed833d2c7805c4bf039b140bec7e7452125a04efa9e0b296395a9b95c2d44c”
    注意:攻击者可以将所有密码的常见组合进行单向哈希,得到一个摘要组合,然后与数据库中的摘要进行比对即可获得对应的密码。这个摘要组合也被称为rainbow table。更糟糕的是,一个攻击者只要建立上述的rainbow table,可以匹配所有的密码数据库。仍然等同于一家“暴库”,全部遭殃。


    比较好的解决方案
    Bcrypt

    <?php
    function generateHash($password) {
     if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {
      $salt = '$2y$11$' . substr(md5(uniqid(rand(), true)), 0, 22);
      return crypt($password, $salt);
     }
    }
    ?>


    Bcrypt 其实就是Blowfish和crypt()函数的结合,我们这里通过CRYPT_BLOWFISH判断Blowfish是否可用,然后像上面一样生成一个盐值,不过这里需要注意的是,crypt()的盐值必须以2a2a或者2y2y开头,详细资料可以参考下面的链接:
    //www.php.net/security/crypt_blowfish.php
    //php.net/manual/en/function.crypt.php
    Password Hashing API
    Password Hashing API是PHP 5.5之后才有的新特性,它主要是提供下面几个函数供我们使用
    password_hash() – 对密码加密.
    password_verify() – 验证已经加密的密码,检验其hash字串是否一致.
    password_needs_rehash() – 给密码重新加密.
    password_get_info() – 返回加密算法的名称和一些相关信息.
    虽然说crypt()函数在使用上已足够,但是password_hash()不仅可以使我们的代码更加简短,而且还在安全方面给了我们更好的保障,所以,现在PHP的官方都是推荐这种方式来加密用户的密码,很多流行的框架比如Laravel就是用的这种加密方式
    <?php
    $hash = password_hash($passwod, PASSWORD_DEFAULT);?>
    PASSWORD_DEFAULT目前使用的就是Bcrypt,知名的还是Password Hashing API。这里需要注意的是,如果你代码使用的都是PASSWORD_DEFAULT加密方式,那么在数据库的表中,password字段就得设置超过60个字符长度,你也可以使用PASSWORD_BCRYPT,这个时候,加密后字串总是60个字符长度。
    这里使用password_hash()你完全可以不提供盐值(salt)和 消耗值 (cost),你可以将后者理解为一种性能的消耗值,cost越大,加密算法越复杂,消耗的内存也就越大。当然,如果你需要指定对应的盐值和消耗值,你可以这样写

    <?php
    function custom_function_for_salt(){
     return $salt = '$2y$11$' . substr(md5(uniqid(rand(), true)), 0, 22);
    }
     
    $password =123456;
     
    $options = [
     'salt' => custom_function_for_salt(), //write your own code to generate a suitable salt
     'cost' => 12 // the default cost is 10
    ];
    $hash = password_hash($password, PASSWORD_DEFAULT, $options);
    echo $hash;
    ?>
    密码加密过后,我们需要对密码进行验证,以此来判断用户输入的密码是否正确

    <?php
    if (password_verify($password, $hash)) {
     // Pass
    }
    else {
     // Invalid
    }
    直接使用password_verify就可以对我们之前加密过的字符串(存在数据库中)进行验证了
    如果有时候我们需要更改我们的加密方式,如某一天我们突然想更换一下盐值或者提高一下消耗值,我们这时候就要使用到password_needs_rehash()函数了

    <?php
    if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' => 12])) {
     // cost change to 12
     $hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);
     
     // don't forget to store the new hash!
    }
    只有这样,PHP的Password Hashing API才会知道我们重现更换了加密方式,这样的主要目的就是为了后面的密码验证,password_get_info(),这个函数一般可以看到下面三个信息
    algo – 算法实例
    algoName – 算法名字
    options – 加密时候的可选参数

    本文章系本站编辑转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!

    相关网站设计案例

    相关推荐新闻
    网站建设解决方案
  • “夏季第一瓜”竟是它! 2019-05-19
  • 魏占军的专栏作者中国国家地理网 2019-05-19
  • 不能让美国沾到便宜。美国沾了便宜就会扩充海军舰队,升级核武库。 2019-05-16
  • 外交部:胁迫中方放弃固有权利是徒劳的 2019-05-15
  • 统计局:5月份经济运行主要指标呈现五大特点 2019-05-07
  • 三星Gear S4智能手表曝料:支持LTE 金色配色三星GearS4智能手表曝料-手机行情 2019-05-07
  • 希望不是拿混吃等死做文章 2019-05-02
  • “2017最具体育活力城市排行榜”Top100发布成都连年提升 青岛首进前十 2019-05-02
  • 北京阅读季·书香企业建设研讨会在京举行 2019-04-30
  • 朔州市图、应县图书馆获“国家一级” 2019-04-30
  • 草民早就说过,如果只讲发展就能解决所有问题,那么发展马克思主义也太容易了。爱因斯坦的相对论超越了牛顿力学,但相对论适应不同的时空。 2019-04-13
  • 广州拟增38家长护险机构 白云海珠分布最多 2019-04-13
  • 李劭凯:今天我们为什么读《孟子》 2019-04-12
  • 河北省盐山县校园舞龙迎端午 2019-03-31
  • 你反来复去说“客观事实及其规律”,自己数一下,都说了几遍了,还不是老年痴呆?要你解释一下什么是“客观事实”,又装聋作哑。 2019-03-26
  • 排列三走势图南方网 足球比分网即时比分 新快三单机游戏下载 冠军pk10赢彩专家 全红彩票官网登陆 时时彩内部管理计划群 排列三走势图 重庆欢乐生肖开奖结果 2019期南国彩票论坛 内蒙古时时彩 黑龙江时时彩彩经网 幸运28是怎么坑人的 迟丽颖大乐透专家预测 牛牛精品视频(正)欧美 重庆百变王牌助手下载 大乐透模拟摇奖器