站点头像

Erythritol's World

我们曾生活在这世界上,但谁记得呢?

PHP用户体系中存储密码的方法

2021年3月12日 由 Erythritol

直接存储法

对,没错,顾名思义,就是将明文密码像用户名一样直接存储。这种方法的优点就是十分方便,需要处理和使用密码时很便捷,不用考虑太多。但其缺点也十分明显:如果数据库等密码存储位置遭到入侵,用户的密码会被暴露;同时,用户的密码可以被数据库管理员看到,这会给用户带来不爽之感。

哈希加密法

哈希加密法即使用PHP的hash函数对密码进行哈希加密,再存储加密后的密码。用法如:

hash("sha256","123456")

此方法非常安全,因为哈希算法属于理论上不可解密的压缩映射算法,所以即使数据库遭到入侵,用户密码也是不会泄露的。如果使用这种方法,校验密码时应该校验输入值的哈希与数据库值是否相等。

PHP加密函数法

此方法与哈希加密法原理差别不大,只不过是使用PHP的password_hash函数而非hash函数加密密码,如:

password_hash("123456",PASSWORD_DEFAULT)

此方法的特点是生成的密码来自盐值(salt),生成的密码是非唯一的,可以一定程度上防止字典破解,比简单的哈希加密更加安全。不过,美中不足是单个密码所生成的哈希值并不相同,因此校验密码必须使用password_verify函数,降低了代码的可移植性。