如何在 WordPress 中测试 HashPassword?

How to test HashPassword in WordPress?

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

我如何检查 HashPassword("123123") return 它的哈希值是否正确?

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

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

$result = HashPassword("123123");

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

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

如何测试?

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

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

密码哈希使用随机 salt, so each time you hash the same password you'll get a different value back. The theory is explained here,即使 WordPress 不使用 php 密码哈希函数,而是使用他们自己的。您无法比较哈希;您只能检查给定的未散列密码是否与散列匹配。

随机盐击败了cybercreeps对rainbow lookup tables to recover passwords given their hashes. This helps keep your users' passwords secret even if a cybercreep manages to steal your wp_users table. Defense in depth的使用,它被称为。

在 WordPress 中,您可以对密码进行散列处理,然后使用 wp_hash_password() and wp_check_password(), 类似的方法检查它。

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

不清楚为什么值得花时间对该子系统进行单元测试。它在世界各地每天被用于生产数十亿次。