3
我必須將我的後端從php遷移到節點。我們使用php crypt(使用默認的隨機鹽)來散列密碼。 例如,對於密碼 'd1692fab28b8a56527ae329b3d121c52',我有我的基礎跟隨加密後PW(取決於如果我使用MD5或SHA512,爲$ I $指定):如何驗證在node.js中使用php-crypt創建的哈希
$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";
其中返回正確加密的pw。
我沒有設法用任何節點函數獲得這樣的結果。我嘗試過這樣的東西:
require("crypto").createHmac("md5", "7JxJYjJK").update("d1692fab28b8a56527ae329b3d121c52").digest("base64");
和其他許多人一樣,但沒有任何成功。 有人可以幫我做這個嗎?我非常需要MD5版本($ 1 $); sha512會有點不錯(我知道這很可怕,但它是在prod服務器上使用的md5版本,以及在測試服務器上使用的sha512)。
http://stackoverflow.com/questions/13537259/ hash-generated-with-php-crypt-in-nodejs是從10個月前開始的,但你可以試試bcrypt呢? https://npmjs.org/package/bcrypt – zamnuts
請仔細閱讀這個問題,我已經有一個用戶羣充滿了生產服務器上的php密碼,我需要能夠在節點中驗證它。 (順便說一句,我已經在Node中使用bcrypt來註冊新客戶端;儘管如此,這並不能解決我最初的問題) – Sebastien
我的確讀過這個問題並理解:你的密碼是'd1692fab28b8a56527ae329b3d121c52',算法是'1'或'6',鹽分別是'7JXJYJJK'和'CVx6KL5l'。驗證需要使用特定算法實現基於密鑰重新生成哈希,其中後者與PHP不一致(根據SO帖子),但是bcrypt據說可能匹配,但我無法獲得gyp來構建它在我的贏機器上,無法測試〜 – zamnuts