2013-10-16 84 views
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)。

+0

http://stackoverflow.com/questions/13537259/ hash-generated-with-php-crypt-in-nodejs是從10個月前開始的,但你可以試試bcrypt呢? https://npmjs.org/package/bcrypt – zamnuts

+0

請仔細閱讀這個問題,我已經有一個用戶羣充滿了生產服務器上的php密碼,我需要能夠在節點中驗證它。 (順便說一句,我已經在Node中使用bcrypt來註冊新客戶端;儘管如此,這並不能解決我最初的問題) – Sebastien

+0

我的確讀過這個問題並理解:你的密碼是'd1692fab28b8a56527ae329b3d121c52',算法是'1'或'6',鹽分別是'7JXJYJJK'和'CVx6KL5l'。驗證需要使用特定算法實現基於密鑰重新生成哈希,其中後者與PHP不一致(根據SO帖子),但是bcrypt據說可能匹配,但我無法獲得gyp來構建它在我的贏機器上,無法測試〜 – zamnuts

回答

1

我剛剛將原始crypt_md5()(在PHP中使用)轉換爲我的項目之一的JavaScript。你可以在這裏找到它:

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

(僅支持1 $ $,但這是至少的,你在找什麼的一部分。)