如何增强PHP的密码安全性

在php5.5之前的一段时间里,使用php存储密码时很多教程上会使用MD5函数对用户密码加密存储,甚至有人存明文密码的。在比对密码是,又把用户输入的密码md5后和存储的密码作比对。

进入php5.5时代之后,PHP 的密码加密存储有了变化,两个相关的函数

password_hash创建密码的散列(hash)

password_hash ( string $password , int $algo [, array $options ] ) : string

password_hash() 使用足够强度的单向散列算法创建密码的散列(hash)。

参数

  • password

  • 用户的密码。

    Caution

    使用PASSWORD_BCRYPT 做算法,将使 password 参数最长为72个字符,超过会被截断。

  • algo

  • 一个用来在散列密码时指示算法的密码算法常量。

  • options

  • 一个包含有选项的关联数组。目前支持两个选项:salt,在散列密码时加的盐(干扰字符串),以及cost,用来指明算法递归的层数。这两个值的例子可在 crypt() 页面找到。

    省略后,将使用随机盐值与默认 cost。

返回值

返回散列后的密码, 或者在失败时返回 FALSE

使用的算法、cost 和盐值作为散列的一部分返回。所以验证散列值的所有信息都已经包含在内。 这使 password_verify() 函数验证的时候,不需要额外储存盐值或者算法的信息。

举例,使用该函数加密密码:

password_hash('mypassword',PASSWORD_DEFAULT );

//得到如下密码

$2y$10$uUcCn.SLlQAj0ZH4KrOXFeVC8VE2.w8aPDu9rlaaMftebIVKq/oQS

若调整加密参数

password_hash('mypassword',PASSWORD_DEFAULT,['cost'=>12] );

//得到如下密码

$2y$12$O3XyiMSIrxVoV.3lbvDJfu99VhkPwGBCoF.rBbvu4O1e049l4kSW.



password_verify验证密码是否和散列值匹配

password_verify ( string $password , string $hash ) : bool

参数

  • password

  • 用户的密码。

  • hash

  • 一个由 password_hash() 创建的散列值。

返回值

如果密码和散列值匹配则返回 TRUE,否则返回 FALSE

密码验证就比较简单了:

password_verify('mypassword'$hash))

用户密码,和密文比对,就可以判断密码是不是正确的了。

网友评论

1条评论

发表

网友评论

1条评论

发表

最新评论

11月13日 23:10

推荐文章

彩龙

Copyright © 2008-2019 彩龙社区(http://www.clzg.cn) 版权所有 All Rights Reserved.

免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。

经营许可证编号:滇B2-20090009-7

下载我家昆明APP 下载彩龙社区APP