我必须将后端从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 版本...)。
d1692fab28b8a56527ae329b3d121c52
,算法是1
或6
,盐分别为7JxJYjJK
和CVx6KL5l
。验证需要根据特定算法实现重新生成基于密钥的哈希值,后者与PHP不一致(根据SO帖子),但据说bcrypt可能匹配,但我无法在我的win机器上构建它,也无法测试~ - zamnuts