我试图在浏览器中重新创建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