Ich wechsle den Hashing-Algorithmus meiner node.js-Anwendung von der JS-basierten CryptoJS Implementierung auf die knoteneigene Krypto Umsetzung.
Hier ist meine Umsetzung:
var password = "password1";
var salt = generateSalt();
var iterations = 4000;
var keySize = 768/32;
var cryptoJSKey = CryptoJS.PBKDF2(password, salt, { "iterations": iterations , "keySize": keySize });
// base64 encoded key
cryptoJSKey = cryptoJSKey.toString(CryptoJS.enc.Base64);
require("crypto").pbkdf2( password, salt, iterations, keySize, function(err, derivedKey){
var nodeCryptoKey = new Buffer( derivedKey, "binary" ).toString( "base64" );
console.log( cryptoJSKey == nodeCryptoKey ); // always false!
});
Eine Sache, die mir aufgefallen ist, ist, dass nodeCryptoKey
ist am Ende 32
Zeichen lang und der cryptoJSKey ist 192
. Wenn ich die keySize
nur für die Knoten crypto
Version zu 144
( keySize * 6
) lautet der Schlüssel schließlich 192
Zeichen lang - und doch ist es anders.
Mache ich etwas falsch oder unterscheiden sich die Implementierungen nur voneinander?