将二进制数据保存到MySQL- bin2hex vs base64_encode
在存储用户密码时,直接将密码存储在数据库中是一个不好的做法。更好的方式是对用户密码进行哈希处理后再存储哈希值。
使用password_hash($password, PASSWORD_DEFAULT)
函数对密码进行哈希处理,该函数会返回一个字符串,可以直接存储在数据库中。验证密码时使用password_verify($userPassword, $hash)
函数来进行验证,如果验证成功,则登录成功。
为了提高密码的安全性,可以使用libsodium库(在php 7.2+中可用)来实现更安全的密码哈希方法。下面是一个使用libsodium库的示例:
// 密码哈希处理: $hash_str = \Sodium\crypto_pwhash_str( $password, \Sodium\CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, \Sodium\CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE ); // 密码验证: if (\Sodium\crypto_pwhash_str_verify($hash_str, $password)) { // 建议:从内存中删除明文密码 \Sodium\memzero($password); // 密码有效。 } else { // 建议:从内存中删除明文密码 \Sodium\memzero($password); // 密码无效。 }
以上是解决存储用户密码安全性问题的方法。通过对密码进行哈希处理,可以大大提高密码的安全性,避免直接将密码存储在数据库中。同时,使用libsodium库可以实现更高级的密码哈希方法,进一步增强密码的安全性。