如何在Node.js中验证使用php-crypt创建的哈希值

4

我必须将后端从php迁移到node。我们使用php crypt(默认随机salt)来哈希密码。 例如,对于密码'd1692fab28b8a56527ae329b3d121c52',我在我的数据库中有以下加密的密码(根据$i$指定使用md5或sha512):

$1$7JxJYjJK$oFtCGyVvflspPtxB7YrWP.
$6$CVx6KL5l$wzk3YXlqUaz42Kb9r2lmEJhx/FBUXPRoLWN.20/XMBbgQrhp3vSHkEDF3bJEtpM3M96VZ.AMKatLGSKYZZKNH/

在PHP中,我可以使用crypt函数验证它们:
echo crypt('d1692fab28b8a56527ae329b3d121c52', '$1$7JxJYjJK$oFtCGyVvflspPtxB7YrWP.');
echo "\n";
echo crypt('d1692fab28b8a56527ae329b3d121c52', '$6$CVx6KL5l$wzk3YXlqUaz42Kb9r2lmEJhx/FBUXPRoLWN.20/XMBbgQrhp3vSHkEDF3bJEtpM3M96VZ.AMKatLGSKYZZKNH/');
echo "\n";

请返回正确的加密密码。

我尝试了一些节点函数,但没有成功获得这样的结果。我尝试了以下方法:

require("crypto").createHmac("md5", "7JxJYjJK").update("d1692fab28b8a56527ae329b3d121c52").digest("base64");

还有其他尝试,但都没有成功。 有人能帮我做这件事吗?我绝对需要 MD5 版本($1$); SHA512 版本也可以(我知道这很可怕,但是在生产服务器上使用的是 MD5 版本,在测试服务器上使用的是 SHA512 版本...)。


这篇关于编程的内容是从10个月前的http://stackoverflow.com/questions/13537259/verify-a-hash-generated-with-php-crypt-in-nodejs,但你可以尝试使用bcrypt代替。https://npmjs.org/package/bcrypt - zamnuts
请阅读问题,我已经在生产服务器上拥有一个填充了PHP加密密码的用户数据库,我需要能够在Node中验证它。 (顺便说一下,对于注册的新客户,我已经在Node中使用bcrypt;但这完全没有解决我的初始问题) - Sebastien
我已经阅读并理解了问题:您的密码是d1692fab28b8a56527ae329b3d121c52,算法是16,盐分别为7JxJYjJKCVx6KL5l。验证需要根据特定算法实现重新生成基于密钥的哈希值,后者与PHP不一致(根据SO帖子),但据说bcrypt可能匹配,但我无法在我的win机器上构建它,也无法测试~ - zamnuts
1
不,bcrypt使用一种特定的算法(我认为是$5y$)。如果你的php恰好使用了这个算法,那么bcrypt确实会匹配。但在其他情况下则不会。 - Sebastien
1个回答

1

我刚刚将原始的crypt_md5()函数(用于PHP)转换为JavaScript,用于我的一个项目中。你可以在这里找到它:

https://github.com/BlaM/cryptMD5-for-javascript

(只支持 $1$,但这至少是你要寻找的一部分。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接