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

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

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

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

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

$result = HashPassword("123123");

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

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

如何测试?

【问题讨论】:

    标签: wordpress unit-testing salt password-hash


    【解决方案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

      【讨论】:

        猜你喜欢
        • 2020-11-29
        • 2013-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多