首选 password_hash() 与 password_verify(),基于bcrypt自动加盐,安全易用;验证用 password_verify,升级兼容可结合 password_needs_rehash;高安全需求可用Sodium扩展的Argon2id算法;禁用MD5、SHA1、手动加盐及crypt()等不安全方式。

处理PHP密码加密,核心是绝不使用简单哈希,必须采用现代、安全的加盐哈希算法。直接对密码进行MD5或SHA1等哈希是极其危险的,容易被彩虹表破解。正确的做法是利用PHP内置的高阶函数来自动处理加盐和迭代过程。
推荐首选:password_hash() 与 password_verify()
这是目前PHP官方强烈推荐、也是最简单安全的密码处理方案。它内部使用了强大的bcrypt算法,并且自动生成高强度随机盐值,开发者无需关心底层细节,从根本上避免了手动加盐可能带来的安全漏洞。
- 加密存储:用户注册或修改密码时,使用 password_hash($password, PASSWORD_DEFAULT) 生成哈希字符串。这个字符串包含了算法、成本因子和盐值,可直接存入数据库。
- 验证登录:用户登录时,用 password_verify($input_password, $stored_hash) 来比对。该函数会自动提取存储哈希中的盐和参数,进行计算比对,返回布尔值。
- 未来兼容性:即使将来需要升级到更强的算法(如argon2),也可以结合 password_needs_rehash() 函数,在用户下次登录时无缝更新其密码哈希。
备选方案:Sodium库 (PHP 7.2+)
对于追求最新加密标准的项目,可以使用PHP的Sodium扩展。它提供了更现代的加密原语,其 sodium_crypto_pwhash_str() 和 sodium_crypto_pwhash_str_verify() 函数功能上类似于 password_hash 和 password_verify,但基于Argon2id算法,在抵抗GPU暴力破解方面表现更佳。
ECTouch是上海商创网络科技有限公司推出的一套基于 PHP 和 MySQL 数据库构建的开源且易于使用的移动商城网店系统!应用于各种服务器平台的高效、快速和易于管理的网店解决方案,采用稳定的MVC框架开发,完美对接ecshop系统与模板堂众多模板,为中小企业提供最佳的移动电商解决方案。ECTouch程序源代码完全无加密。安装时只需将已集成的文件夹放进指定位置,通过浏览器访问一键安装,无需对已有
- 此方案安全性极高,是面向未来的最佳选择。
- 需要确保服务器环境已安装并启用了Sodium扩展。
绝对避免的方法
以下方法因存在严重安全隐患,不应再用于新项目:
立即学习“PHP免费学习笔记(深入)”;
- 纯MD5/SHA1:如 md5($password) 或 sha1($password)。这些算法设计过时,计算速度快,极易被暴力破解和彩虹表攻击。
- 简单手动加盐:例如 md5($password . $salt)。虽然比纯哈希好一点,但如果盐值不够随机或算法本身不安全,依然脆弱。而且开发者很容易在实现上犯错(如盐值复用)。
- 废弃的crypt() + Blowfish:虽然Bcrypt本身是好的,但直接使用 crypt() 函数需要开发者手动管理盐值格式,容易出错,远不如 password_hash 安全便捷。










