最安全的 PHP 密码加密方法

前言:

在 PHP 开发过程中,很多人 PHP 密码加密都是用的 md5 和 sha1(包括 sha256.......),但不知道,随着技术进步和计算机硬件的提升(集群、分布式、云计算),破解者可以快速使用 "暴力"(彩虹表)方式来寻找密码加密后散列码所对应的原始数据。

最安全的 PHP 密码加密方法:

PHP 官方自带的密码哈希函数 password_hash()
常用的 MD5、SHA1、SHA256 哈希算法,是面向快速、高效进行哈希处理而设计的。随着技术进步和计算机硬件的提升,如今强大的计算机很容易破解这种算法。也就是说,不要用 MD5、SHA1、SHA256 这种哈希方法加密密码了,不太安全。

还好,PHP 内置了密码哈希函数 password_hash,使用这个方法,PHP 会升级底层的算法,达到如今的安全标准水平。

注意:PHP 5.5 之后引入 Password hashing API 用于创建和校验哈希密码,它属于内核自带,无需进行任何扩展安装和配置。

函数具体怎么用?我就不多说了,请大家自行查手册,我简单给大家解释一下:为什么建议大家用 password_hash () 函数?
1、password_hash() 会随机生成 "盐" 。

2、password_hash() 加密后的值包括了 "随机盐"+"密码散列" 组合的值。当然生成这个值是通过了一定算法的,不要问为什么?

3、数据库只需要一个字段就可以存取 "随机盐"+"密码散列" 值。我以前开发项目,为了保证不同用户用不同的盐,我数据库还用了两个字段,一个存密码散列值,另一个存盐的值。

4、密码验证简单,只需要用 password_verify() 函数验证即可!
第一步:password_hash () 加密

用法示例:(推荐)

copy

 
  • <?php

  • /**

  • * 我们想要使用默认算法散列密码

  • * 当前是 BCRYPT 算法,并会产生 60 个字符的结果。

  • * 据说bcrypt算法永不过时。

  • *

  • * 请注意,随时间推移,默认算法可能会有变化,

  • * 所以需要储存的空间能够超过 60 字(255字不错)

  • */

  • echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT);

  • ?>

以上例程的输出类似于:

copy

 
  • $2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

第二步:加密后的散列值存数据库。

这样我们可以直接把上面加密后的值存入数据库,只需要一个字段。

第三步:password_verify() 验证密码是否和散列值匹配?

用法示例:

copy

 
  • <?php

  • // 想知道以下字符从哪里来,可参见 password_hash() 的例子

  • $hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';

  •  
  • if (password_verify('rasmuslerdorf', $hash)) {

  • echo '密码正确';

  • } else {

  • echo '密码错误';

  • }

  • ?>

更多相关密码散列算法函数:

copy

 
  • password_algos --- 获取可用的密码哈希算法ID

  •  
  • password_get_info --- 返回指定散列(hash)的相关信息

  •  
  • password_hash --- 创建密码的散列(hash)

  •  
  • password_needs_rehash --- 检测散列值是否匹配指定的选项

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

请参考 PHP 官方手册:https://www.php.net/manual/zh/ref.password.php

总结:

可能很多人不知道,password_hash() 这个函数,它的前身其实就是 phpass,phpass 是一个开源类库,它可以让我们更方便使用 bcrypt 加密算法。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
PHP提供了多种安全加密方法,以下是常用的几种: 1. 哈希算法:php中常用的哈希算法有MD5和SHA1。哈希算法将明文转换为固定长度的密文,不可逆。可以使用md5()和sha1()函数进行加密,但由于哈希算法已被破解,不建议直接使用。 2. 加盐哈希算法:为了增加哈希算法的安全性,可以使用加盐哈希算法。加盐是在密码明文前或后添加特定字符串,使哈希结果更不可预测。可以使用password_hash()函数生成盐值,并使用password_verify()函数进行验证。 3. 对称加密算法:对称加密算法使用相同的密钥进行加密和解密,常见的有AES和DES算法。使用mcrypt_encrypt()和mcrypt_decrypt()函数可以对数据进行对称加密和解密。 4. 非对称加密算法:非对称加密算法使用公钥和私钥进行加密和解密,常见的有RSA算法。使用openssl_public_encrypt()和openssl_private_decrypt()函数可以对数据进行非对称加密和解密。 5. SSL/TLS:SSL/TLS是一种安全协议,用于在客户端和服务器之间建立加密通信。可以使用OpenSSL扩展库进行SSL/TLS加密。 使用加密算法时,需要注意以下几点: 1. 使用足够的强度:选择合适的加密算法和密钥长度,以满足安全需求。 2. 加盐:对于哈希算法,使用随机的、唯一的盐值增加密码的安全性。 3. 密钥管理:保证密钥的安全性,防止泄露。 4. 防止密码重用:不要使用相同的密码或密钥进行加密不同的数据。 5. 保护敏感信息:加密只能保证数据在传输或存储过程中的安全性,不应将敏感信息明文存储在数据库中。 综上所述,选择适合的加密算法,并结合使用加盐、SSL/TLS等方法,可以增加PHP应用程序的安全性
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值