gpt4 book ai didi

php - 当密码中存在国际字符时,Phpass 的 WP 和 Node 实现不匹配

转载 作者:太空宇宙 更新时间:2023-11-03 23:56:53 24 4
gpt4 key购买 nike

我想使用我自己用 Node.js 编写的身份验证服务对 WP 用户进行身份验证。我已将用户保存在 wp_users 中 table 。他们的密码由 WordPress 使用 Phpass 方法进行哈希处理。当用户尝试登录他的帐户时,WP 使用 CheckPassword()方法并返回 bool 值 true/false密码是否匹配。

现在我想使用 Node 将用户密码与 WP 哈希进行比较。我发现node-phpass module在 NPM 上,它应该提供用于密码哈希的 Phpass 算法。

一切都很好,直到我使用国际字符。这是一个例子:

在 WP 中,我像这样设置密码,并获取哈希值:

电话:alamakota
电话:$P$BSrncAWIY2KU7waUGLzayaon6v3gKU1

当我尝试登录时,WP 说“一切都好,请进来,伙计”

现在,我获取哈希并尝试使用 node-phpass 模块验证它:

const hasher = new PasswordHash(8, true, 7);
const valid = hasher.CheckPassword('alamakota', '$P$BSrncAWIY2KU7waUGLzayaon6v3gKU1');
console.log(valid); // => true

它说“酷,密码匹配!”

它在其他方面也能完美地工作。

现在,您可能会问问题出在哪里?这里:

情况几乎和以前一模一样,但我会输入ą密码中的字符并使用 WP 对其进行哈希处理:

电话:alamakotą
电话:$P$B6kY.rneyNwdPvAgd0lDq6oYv82XOd1

再次,当使用 WP 进行验证时,它会显示“密码匹配!进来。”

不幸的是,当我尝试使用 node-phpass 比较密码时,它显示“对不起,伙计,你不会通过”:

const hasher = new PasswordHash(8, true, 7);
const valid = hasher.CheckPassword('alamakotą', '$P$B6kY.rneyNwdPvAgd0lDq6oYv82XOd1');
console.log(valid); // => false

反之亦然。

为什么会这样呢?当密码中有国际字符时,为什么我不能在 Node.js 中使用 WP 哈希?

更新:

我刚刚发现 PHP 的 md5()函数和 JS crypto.createHash('md5')当输入字符串中存在国际字符时,不会返回相同的哈希值。有什么解决办法吗?

最佳答案

事实证明,由于字符编码的原因,PHP 的 md5() 函数返回的哈希值与 JS 的 crypto.createHash('md5') 不同。我用过utf8在将密码与哈希值进行比较并且一切按预期工作之前:

const utf8 = require('utf8');
const hasher = new PasswordHash(8, true, 7);
const valid = hasher.CheckPassword(utf8.encode('alamakotą'), '$P$B6kY.rneyNwdPvAgd0lDq6oYv82XOd1');
console.log(valid); // => true

关于php - 当密码中存在国际字符时,Phpass 的 WP 和 Node 实现不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56705249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com