我想使用自己用 Node.js 编写的身份验证服务对 WP 用户进行身份验证。我有用户保存在wp_users
表中。他们的密码使用 WordPress 的 Phpass 方法进行哈希处理。当用户尝试登录他的帐户时,WP 正在使用CheckPassword()
方法并返回布尔值true
/false
如果密码匹配或不匹配。
现在我想使用 Node 将用户密码与 WP 哈希进行比较。我在 NPM 上找到了node-phpass 模块,它应该为密码散列提供 Phpass 算法。
在我使用国际字符之前一切都很好。这是一个例子:
在 WP 中,我这样设置密码,并得到一个哈希值:
P: alamakota
H:$P$BSrncAWIY2KU7waUGLzayaon6v3gKU1
当我尝试登录时,WP 说“没事,进来吧,伙计”
现在,我获取哈希并尝试使用 node-phpass 模块对其进行验证:
const hasher = new PasswordHash(8, true, 7);
const valid = hasher.CheckPassword('alamakota', '$P$BSrncAWIY2KU7waUGLzayaon6v3gKU1');
console.log(valid); // => true
它说“酷,密码匹配!”
它也以另一种方式完美地工作。
现在,您可能会问,问题出在哪里?这里:
情况和以前几乎一模一样,但我将把ą
字符放入密码中并使用 WP 对其进行哈希处理:
P: alamakotą
H:$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'escrypto.createHash('md5')
不会返回相同的哈希值。有什么解决办法吗?