ブラウザにSymfony's MessageDigestPasswordEncoder
を再作成しようとしています。パスワードからの暗号鍵の派生により、ブラウザで異なる結果が表示される
browserifyとcryptoモジュールに問題があります。 JavaScriptを使用して、ノードを使用せずにハッシュを生成しようとしています。私はbrowserify
browserify index.js > crypto.js
Iを使用し、
qmNs3bqtTeoS4uRq2Chh1fUNPu+lzn3KR7mWFHAq5NEPrK0QZ9XkLDUniZ39uosnozNrPL7mByzUZ/A19Io4sQ==
を今、私はノードなしでこれを実装する必要があります考慮:
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"));
それが返されます。ここ
は、ノードとの私のコードですテストページを作成しました。<script src="crypto.js"></script>
コンソールログ出力は次のようになります。
JtDIZwGDybG6tG7PE2SeXS0BEa4vOoxpu3y7Il6P6OQL9djmrk5S0vjTGoQowGO22OvQ58tC05eZBt/yvyJv+A==
私は2つの異なる結果を持っている理由についての任意のアイデア?
それ以外の場合、純粋なJS(ノードなし)で同じ結果を得る方法はありますか?
あなたは代わりに、独自の圧延などPBKDF2など、いくつかの標準化されたスキームを使用して開始することができます。私は問題がhash.digest( 'binary')の '' binary ''と関係があると考えています。とにかく、SJCLはnode.jsのcrypoモジュールだけでなく、高速のPBKDF2実装を提供します。 –
ありがとうございます。私は方法を再現しようとしています[Symfonyはパスワードを暗号化します](http://api.symfony.com/3.0/Symfony/Component/Security/Core/Encoder/MessageDigestPasswordEncoder.html)。したがって、PBKDF2は使用できません。 – Decap