Wordpress sha 256 login


Wordpress sha 256 login

我被要求启用SHA256来存储wordpress密码。我已经搜索了插件没有运气(不工作),所以我开始开发自己的。

我一开始以为…如果我用我自己的函数替换wp_hash_password,它将在保存密码和登录时加密。但我没那么幸运。我能够运行哈希(sha256),虽然在一个基本的php文件。我知道用户将无法登录,因为存储的密钥将是md5,比较将是SHA,但这不是问题。

代码:

 if(!function_exists('wp_hash_password')):
   function wp_hash_password($password){
     return hash('sha256', $password);
   }
endif;

所以我想我必须做我自己的"检查登录"功能。有人做了这样的事吗?他们的

在我看来,如果您覆盖wp_check_password函数,您的方法应该工作。这必须在一个插件中完成,我认为,因为函数是在主题的functions.php之前加载的。像这样:

<?php
/*
Plugin Name: sh256pass
Version: 1.0
*/
if(!function_exists('wp_hash_password')):
   function wp_hash_password($password){
     return hash('sha256', $password);
   }
endif;

if(!function_exists('wp_check_password')):
    function wp_check_password($password, $hash, $user_id = '') {
        // You might want to apply the check_password filter here 
        return wp_hash_password($password) == $hash;
    }
endif;

请注意,你要么必须让你的用户在下次登录时重置他们的密码(你将无法自动转换现有的密码),或者你必须遵循WordPress在wp_check_password中的方法,并将密码与旧的加密值(在他们的情况下md5)进行比较,如果匹配,更新到新值。

请记住wp_users.user_pass字段只有64个字符长。虽然这个长度(刚好)足以存储sha256值,但它不足以存储sha256。如果不加盐,并且两个用户选择相同的密码,则wp_users.user_pass字段将包含相同的值,从而使任何访问数据库的人都可以明显地看到密码是相同的。我的直觉是,这比使用目前的算法有更大的安全风险。您可以通过(例如)在散列之前将用户ID和密码连接起来来解决这个问题,但是可能存在不知道用户ID的边缘情况(例如在创建用户时)。