zoukankan      html  css  js  c++  java
  • 哈希函数

    echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT)." ";

    验证函数:

    boolean password_verify ( string $password , string $hash )

    比如

    if (password_verify('rasmuslerdorf', $hash)) {
    echo 'Password is valid!';
    } else {
    echo 'Invalid password.';
    }

    ci框架的手册里有这样一段话:

    复制代码
    在你的应用程序中正确处理密码是非常关键的。

    但是不幸的是,许多开发者并不知道怎么去做,而且网络上充斥着大量过时的 甚至错误的建议,提供不了任何帮助。

    我们提供了一个清单来帮助你,告诉你什么该做,什么不该做。

    绝不要以明文存储密码。

    永远使用 哈希算法 来处理密码。
    绝不要使用 Base64 或其他编码方式来存储密码。

    这和以明文存储密码是一样的,使用 哈希 ,而不要使用 编码 。

    编码以及加密,都是双向的过程,而密码是保密的,应该只被它的所有者知道, 这个过程必须是单向的。哈希正是用于做这个的,从来没有解哈希这种说法, 但是编码就存在解码,加密就存在解密。
    绝不要使用弱哈希或已被破解的哈希算法,像 MD5 或 SHA1 。

    这些算法太老了,而且被证明存在缺陷,它们一开始就并不是为了保存密码而设计的。

    另外,绝不要自己发明算法。

    只使用强密码哈希算法,例如 BCrypt ,在 PHP 自己的 密码哈希 函数中也是使用它。

    即使你的 PHP 版本不是 5.5+ ,也请使用它们,CodeIgniter 为你提供了这些算法。

    如果你连升级 PHP 也无法做到,那么使用 hash_pbkdf() <http://php.net/hash_pbkdf2> 吧, 为实现兼容性我们提供了这个函数。
    绝不要以明文形式显示或发送密码。

    即使是对密码的所有者也应该这样。如果你需要 "忘记密码" 的功能,可以随机生成一个新的 一次性的(这点很重要)密码,然后把这个密码发送给用户。
    绝不要对用户的密码做一些没必要的限制。

    如果你使用除 BCrypt(它有最多 72 字符的限制)之外的其他哈希算法,你应该设置一个相对长一点的密码长度(例如 1024 字符),这样可以缓解 DoS 攻击。

    但是除此之外,对密码的其他限制诸如密码中只允许使用某些字符,或者密码中不允许包含某些字符,就没有任何意义了。

    这样做不仅不会提高安全性,反而 降低了 安全性,而且真的没有任何理由需要这样做。 只要你对密码进行哈希处理了,那么无论是技术上,还是在存储上都没有任何限制。

    来源:https://www.cnblogs.com/xielefour/p/6090920.html    感谢作者

  • 相关阅读:
    函数二 10
    函数初识 09
    文件操作 08
    数据类型的补充 day07
    小数据池 深浅copy 集合
    python Mysql 多条件查询
    ElasticSearch Python 基本操作
    用PyInstaller把Python代码打包成单个独立的exe可执行文件
    python 编译EXE文件
    Git 创建新分支检查分支
  • 原文地址:https://www.cnblogs.com/phpxj/p/11348311.html
Copyright © 2011-2022 走看看