如何在 WordPress 中测试 HashPassword?

Posted

技术标签:

【中文标题】如何在 WordPress 中测试 HashPassword?【英文标题】:How to test HashPassword in WordPress? 【发布时间】:2022-01-07 05:11:40 【问题描述】:

我想测试(单元测试)来自 WordPress 的 HashPassword($password) 方法。

如何检查 HashPassword("123123") 是否会为其返回正确的哈希?

例如,我想做这样的事情:

$hashFor123123 = "$P$P)230230832482349823";

$result = HashPassword("123123");

$this->assertSame($hashFor123123, $result);

但是,HashPassword 方法每次都返回一个带有哈希的新字符串。这就是为什么我不能断言。

如何测试?

【问题讨论】:

【参考方案1】:

密码散列使用随机的salt,因此每次散列相同的密码时,您会得到不同的值。理论解释here,即使WordPress不使用php密码哈希函数,而是他们自己的。您无法比较哈希值;您只能检查给定的未哈希密码是否与哈希匹配。

随机盐击败了网络爬虫使用rainbow lookup tables 来恢复给定哈希值的密码。即使网络蠕虫设法窃取您的 wp_users 表,这也有助于保护您的用户密码。 Defense in depth,它被调用了。

在 WordPress 中,您可以对密码进行哈希处理,然后使用 wp_hash_password() 和 wp_check_password(), 类似的方式检查它。

$hash = wp_hash_password( '123123' );
if ( wp_check_password( '123123', $hash )) 
  /* it worked */
 else 
  /* it did not work */

不清楚为什么值得您花时间对这个子系统进行单元测试。它在全球范围内每天被用于生产数十亿次。

【讨论】:

【参考方案2】:

每次调用HashPassword结果都不一样的原因是因为你的密码是prefixed by a random salt在经过哈希处理之前。

要将明文密码与已知哈希值进行比较,您必须调用CheckPassword

【讨论】:

以上是关于如何在 WordPress 中测试 HashPassword?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 wordpress 帖子中使用降价

如何在我自己的插件上修复“此插件尚未使用 WordPress 的最新 3 个主要版本进行测试。它...”

如何通过 Javascript 在 wordpress 中检索当前用户?

我有一个 WordPress 网站并希望将其置于测试版或限制访问?

如何检查 WordPress 中是不是启用了 XML-RPC

如何强制WordPress Gutenberg刷新特色图片?