J'essaye de recréer Symfony's MessageDigestPasswordEncoder
dans le navigateur.la dérivation d'une clé de chiffrement à partir d'un mot de passe produit des résultats différents avec browserify
J'ai un problème avec browserify et le module crypto. J'essaie de générer du hash avec JavaScript mais sans Node.
Voici mon code avec nœud:
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"));
Il retourne:
qmNs3bqtTeoS4uRq2Chh1fUNPu+lzn3KR7mWFHAq5NEPrK0QZ9XkLDUniZ39uosnozNrPL7mByzUZ/A19Io4sQ==
Maintenant, étant donné que je dois mettre en œuvre ce sans nœud, je browserify
browserify index.js > crypto.js
I créé une page de test et comprend:
<script src="crypto.js"></script>
La sortie du journal de la console est:
JtDIZwGDybG6tG7PE2SeXS0BEa4vOoxpu3y7Il6P6OQL9djmrk5S0vjTGoQowGO22OvQ58tC05eZBt/yvyJv+A==
Toute idée pourquoi j'ai deux résultats différents?
Sinon, existe-t-il un moyen d'obtenir le même résultat en JS pur (sans nœud)?
Vous pouvez commencer à utiliser un certain système standardisé, comme PBKDF2 au lieu de rouler votre propre. Je pense que le problème a quelque chose à voir avec le '' binary'' dans 'hash.digest ('binary')'. Quoi qu'il en soit, SJCL fournit une implémentation rapide de PBKDF2 ainsi que le module crypo de node.js. –
Merci, mais j'essaie de reproduire la façon dont [Symfony chiffre le mot de passe] (http://api.symfony.com/3.0/Symfony/Component/Security/Core/Encoder/MessageDigestPasswordEncoder.html). Par conséquent, je ne peux pas utiliser PBKDF2. – Decap