XAMPP环境下PHP注册改用sha256哈希后登录验证失败求助
问题根因
你注册时使用hash("sha256", $_POST['password'])生成密码哈希,但登录校验时调用的password_verify()是PHP专门用于校验password_hash()函数生成的哈希的专用方法,两者生成的哈希格式完全不兼容,所以永远返回校验失败。
方案1:适配当前sha256逻辑(仅适合本地测试,不推荐线上使用)
直接修改login.php的密码校验逻辑,将用户输入的密码同样做sha256哈希后和数据库存储的值直接比对即可。
把login.php中的对应代码:
if(password_verify($password, $hashed_password)){
替换为:
if(hash("sha256", $password) === $hashed_password){
注意:该方案没有给密码加随机盐,相同密码生成的哈希完全一致,极易被彩虹表破解,不要在线上环境使用。
方案2:使用PHP原生密码哈希(强烈推荐)
PHP提供的password_hash()默认使用bcrypt算法,自动为每个密码生成唯一随机盐,抗暴力破解能力远强于自行实现的sha256哈希,仅需要修改register.php的哈希生成逻辑即可,不需要改动现有登录代码。
把register.php中的对应代码:
$param_password = hash("sha256" , $_POST['password']); // Creates a password hash
替换为:
$param_password = password_hash($_POST['password'], PASSWORD_DEFAULT);
注意:替换后需要重新注册账号测试,之前用sha256生成的旧账号密码无法被
password_verify()识别。
内容的提问来源于stack exchange,提问作者xMitzux
相关产品推荐
相关产品推荐

