10

Django サイトを Node.js に移植しており、Node.js で Django set password メソッドを再実装しようとしています。これはジャンゴのコードです

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);
});

Node での私のソリューションは、Python / Django コードと同じ結果を出力しません。この時点で、私はほとんど頭を抱えています。どんな助けでも大歓迎です。前もって感謝します。

4

5 に答える 5

6

pbkdf2-sha256を使用したより良い解決策は次のとおりです。

var pbkdf2 = require('pbkdf2-sha256');
var password = 'text1';
var salt = 'p9Tkr6uqxKtf';
var algorithm = "pbkdf2_sha256";
var iterations = 10000;
var hashed = pbkdf2(password, new Buffer(salt), iterations, 32).toString('base64');
var finalPass = algorithm +'$'+ iterations +'$'+  salt +'$'+  hashed;

上記のコードは、Node.js を使用して Django に保存されているパスワードを検証するのに十分なはずです。

于 2014-05-09T09:19:47.523 に答える
1

したがって、これに対する私の解決策は、ソルトとユーザーのパスワードを受け取り、ハッシュされたパスワードを返す python スクリプトを作成することでした。ノードからこのスクリプトを呼び出し、結果を解析します。ハッシュ化されたパスワードが pbkdf2_sha256 で始まるかどうかを確認し、Python スクリプトが返したものに対して検証します。検証された場合は、新しいシステム ハッシュ関数を使用してパスワードをリセットします。

于 2013-03-15T18:27:24.870 に答える
0

バババの答えに続いて、私のアプローチはPythonスクリプトも作成することでした

「django.contrib.auth インポート ハッシャーから」

関数 hashers.check_password() および hashers.make_password() は、Django インストールに対してパスワードを検証または作成するために必要な機能を提供します。

この関数に関するその他のドキュメントは、https://docs.djangoproject.com/en/1.5/topics/auth/passwords/にあります。

于 2014-02-28T23:17:16.503 に答える