我試圖在瀏覽器中重新創建Symfony's MessageDigestPasswordEncoder
。節點加密密鑰從密碼派生產生與browserify不同的結果
我對browserify和crypto模塊有一些問題。 我嘗試使用JavaScript生成哈希,但沒有節點。
這裏是我的代碼以節點:
var crypto = require('crypto');
var encodePassword = function (raw, salt) {
var salted = raw + '{'+salt+'}',
hash = crypto.createHash('sha512').update(salted, 'utf-8');
for (var i = 1; i < 5000 ; i++) {
hash = crypto.createHash('sha512').update(hash.digest('binary')+salted);
}
return hash.digest('base64');
};
console.log(encodePassword("admin", "81b6zjhf64w8kogsgkgw804ss8gc0w0"));
它返回:
qmNs3bqtTeoS4uRq2Chh1fUNPu+lzn3KR7mWFHAq5NEPrK0QZ9XkLDUniZ39uosnozNrPL7mByzUZ/A19Io4sQ==
現在,考慮到我需要實現這一點沒有節點,我用browserify
browserify index.js > crypto.js
我創建了一個測試頁面,其中包括:
<script src="crypto.js"></script>
控制檯日誌輸出是:
JtDIZwGDybG6tG7PE2SeXS0BEa4vOoxpu3y7Il6P6OQL9djmrk5S0vjTGoQowGO22OvQ58tC05eZBt/yvyJv+A==
爲什麼我有兩個不同的結果,任何想法?
否則,有沒有辦法在純JS(無節點)中獲得相同的結果?
你可以如PBKDF2而不是滾動您自己開始使用一些標準化的方案。我懷疑這個問題與hash.digest('binary')'中的''binary''有關。無論如何,SJCL提供了一個快速的PBKDF2實現以及node.js的crypo模塊。 –
謝謝,但我試圖重現[Symfony加密密碼]的方式(http://api.symfony.com/3.0/Symfony/Component/Security/Core/Encoder/MessageDigestPasswordEncoder.html)。因此,我不能使用PBKDF2。 – Decap