我希望使用 PHP 中的双向加密来加密我的网站密码。我发现 mcrypt 库非常繁琐。有没有其他更简单但安全的方法?我可以使用 Zend Framework 来解决。我需要双向加密因为我的客户想要进入数据库更改或检索密码。
您应该将密码存储为哈希值(并且适当加盐)。
世界上没有任何借口可以打破这个规则。
目前,使用crypt,使用CRYPT_BLOWFISH是最佳实践。
PHP中的CRYPT_BLOWFISH是Bcrypt哈希的实现。 Bcrypt基于Blowfish块密码。
如果客户端尝试登录,则对输入的密码进行哈希处理,并将其与DB中存储的哈希进行比较。 如果匹配,则授予访问权限。
如果客户端想要更改密码,则需要通过一些小脚本来完成,该脚本会正确地哈希新密码并将其存储到DB中。
如果客户端想要恢复密码,则应生成一个新的随机密码并发送给客户端。 新密码的哈希值存储在DB中
如果客户端想要查找当前密码,则他们没有机会。 这正是哈希密码的目的:系统不知道密码,因此永远无法“查找”/窃取密码。
Jeff在博客中写道:You're Probably Storing Passwords Incorrectly。
如果想使用标准库,可以查看Portable PHP password hashing framework并确保使用CRYPT_BLOWFISH算法。通常来说,直接在数据库中操作记录很容易出问题。许多人(包括非常有经验的数据库管理员)都已经深刻认识到这一点了。openssl_public_encrypt()
和 openssl_private_decrypt()
。要么以明文形式存储,要么存储密码的哈希值(即不可逆转)。
做任何其他操作 - 尤其是使用硬编码的对称加密 - 基本上毫无意义。
如果您按照您提出的方式进行操作,而您的计算机被攻击者入侵,攻击者将获得访问权限,不仅可以访问加密后的密码,还可以访问代码和解密它们的密钥,因此他们可能与以明文形式存储相同。
如果您希望保护数据免受他人获取物理访问计算机的影响,请使用加密文件系统(但仍需将密码以明文形式存储在其中的数据库中)。当然,在每次重新启动之前,您需要手动输入密钥才能使用系统。