我通過Django站點移植到Node.js,我試圖在Node中重新實現Django set密碼方法。這是Django的代碼python(Django)hashlib與Nodejs加密
from django.utils.crypto import (
pbkdf2, get_random_string)
import hashlib
password = 'text1'
algorithm = "pbkdf2_sha256"
iterations = 10000
salt = 'p9Tkr6uqxKtf'
digest = hashlib.sha256
hash = pbkdf2(password, salt, iterations, digest=self.digest)
hash = hash.encode('base64').strip()
print "%s$%d$%s$%s" % (self.algorithm, iterations, salt, hash)
和這裏的Node.js的代碼,我到目前爲止:
var password = 'text1';
var hashed = crypto.createHash('sha256').update(password, 'utf8').digest();
var salt = 'p9Tkr6uqxKtf';
var algorithm = "pbkdf2_sha256";
var iterations = 10000;
crypto.pbkdf2(hashed, salt, iterations, 32, function(err, encodedPassword) {
var newPass = new Buffer(encodedPassword).toString('base64');
console.log(encodedPassword);
// console.log(Buffer(encodedPassword, 'binary').toString('hex'));
var finalPass = algorithm +'$'+ iterations +'$'+ salt +'$'+ newPass;
console.log(finalPass);
});
我的節點解決方案不輸出相同的結果的Python/Django的代碼。在這一點上,我幾乎在我的頭上,任何幫助將非常感激。提前致謝。
節點使用HMAC + SHA1,並且據我所見,無法更改(而使用Python,您可以使用'digest.sha1'而不是'digest.sha256',但我不確定這是否您可以接受)。 – robertklep 2013-03-13 20:45:15
是的,我現在的密碼是用sha256創建的。 – imns 2013-03-13 21:12:01
[cryptojs](https://github.com/gwjjeff/cryptojs)支持PBKDF2與HMAC + SHA256,但它仍然不會產生相同的結果。我認爲Django使用它自己的實現不太標準。 – robertklep 2013-03-13 21:43:11