WordPress SHA 256登录

3
我被要求启用SHA256来存储WordPress密码。我搜索了一些插件,但没有找到适合的(都不能用),于是我开始开发自己的插件。
我首先尝试替换wp_hash_password函数为自己的函数,以便在保存密码和登录时进行加密。但是我并没有那么幸运。我能够在基本的PHP文件中运行hash(sha256)。我知道用户将无法登录,因为存储的密钥将是md5,而比较的方式是SHA,但这不是问题。
代码:
 if(!function_exists('wp_hash_password')):
   function wp_hash_password($password){
     return hash('sha256', $password);
   }
endif;

所以我想我得自己写一个“检查登录”功能。有人做过这样的事情吗?


标准的MD5为什么不合适? - ggdx
1个回答

3
似乎你的方法应该可行,如果你也覆盖 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(例如在创建用户时)。
就我个人而言,我会对此要求提出疑问。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接