站点头像

Citrino's Cafe

少女祈祷中……

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

2021年3月12日 由 Citrino

直接存储法

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

哈希加密法

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

hash("sha256","123456")

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

PHP 加密函数法

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

password_hash("123456",PASSWORD_DEFAULT)

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