2016-06-22 6 views
0

ich einen mongodb Server haben, Passwort durch diese erzeugt speichert node.js Code:Node.js crypto.pbkdf2Sync Passwort mit Python-Skript nicht überein

encryptPassword(password, callback) { 
    if (!password || !this.salt) { 
     return null; 
    } 

    var defaultIterations = 10000; 
    var defaultKeyLength = 64; 
    var salt = new Buffer(this.salt, 'base64'); 

    if (!callback) { 
     return crypto.pbkdf2Sync(password, salt, defaultIterations, defaultKeyLength) 
       .toString('base64'); 
    } 

    return crypto.pbkdf2(password, salt, defaultIterations, defaultKeyLength, (err, key) => { 
     if (err) { 
     callback(err); 
     } else { 
     callback(null, key.toString('base64')); 
     } 
    }); 
} 

Aber die Authentifizierungsphase wird durch ein Python-Skript ausgeführt, nimm das Klartext-Passwort und sollte das gleiche Passwort von node.js rekonstruieren. Ich versuche das mit hashlib und pbkdf2 von django python-Modulen zu tun, aber die Ergebnisse stimmen nicht überein. Das hashlib-Skript lautet:

salt = base64.b64encode(b'salt') 
hashedPassword = hashlib.pbkdf2_hmac('sha1', b'password', salt, 10000, 64) 
encodedPassword = base64.b64encode(res) 

Haben Sie irgendwelche Ideen?

Antwort

0

In Ihrem Node-Code, Sie haben dies:

var salt = new Buffer(this.salt, 'base64'); 

Dies setzt voraus, dass this.salt ist ein Base64 codiert Zeichenfolge, die das Salz enthält. Es wird anschließend in eine Buffer decodiert. Also, salt ist ein (binärer) Puffer.

In Ihrem Python-Code, haben Sie dies:

salt = base64.b64encode(b'salt') 

Dies nimmt die Binärkette salt und Base64-kodiert sie. Also, salt ist ein (Base64-codierter) String.

Beachten Sie den Typenkonflikt zwischen Knoten (Binärpuffer) und Python (Base64-codierte Zeichenfolge)?

Verwenden Sie stattdessen diese in Ihrem Python-Code:

salt = b'salt' 

oder dem Python-Code erlaubt eine Base64-codierte Zeichenfolge als Salz zu nehmen, und dekodieren:

salt = base64.b64decode('c2FsdA==') 
+0

Dank robertklep, die Decodierung Salz mit Python es funktioniert. Danke noch einmal – hasmet

Verwandte Themen