php的哈希函数

php的哈希函数

哈希函数:

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

验证函数:

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 攻击。

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

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

refer: https://www.cnblogs.com/xielefour/p/6090920.html

author:写乐~~

PHP安全之密码哈希处理: https://www.helloweba.net/php/426.html

这个是应用,分别是使用md5+salt和password_hash两种方式

猜你喜欢

转载自blog.csdn.net/phoenixcsl/article/details/84314984