2013-09-30 13 views

答えて

10

のようなたとえば、他のアプリケーションでは、しかし、ジャンゴ.FORのユーザ名にadmin 'と同じデータベースを使用して、パスワード私はあなたが探しているものかもしれないこの思い:

Manually managing a user’s password

make_password(パスワード〔、塩、hashers])

が使用 形式でハッシュされたパスワードを作成しますこのアプリケーションによって。 1つの必須の引数をとります: パスワードはプレーンテキストです。オプションで、デフォルト値(最初は のPASSWORD_HASHERS設定のエントリ)を使用しない場合は、saltと、使用するハッシュアルゴリズム を使用できます。現在サポートされているアルゴリズム は、 'pbkdf2_sha256'、 'pbkdf2_sha1'、 'bcrypt_sha256'(bcrypt をDjangoで使用するを参照)、 'bcrypt'、 'sha1'、 'md5'、 'unsalted_md5'(後方互換性は のみ)暗号ライブラリ「 」がインストールされている場合は「crypt」と表示されます。 password引数がNoneの場合、使用できないパスワードは (check_password()で決して受け入れられないパスワード)です。


私は、Djangoはオープンソースですので、あなたが行くとあなたが必要なものを取ることができます。まあ幸運にもジャンゴ

なし

を使用するための関数を書きたいですThe functions source is visible here

+0

ありがとうございますが、このメソッドはdjangoアプリケーションで使用されています。私はdjangoを使わずに、次のような関数を書いてほしい:http://stackoverflow.com/questions/1306550/calculating-a-sha-hash-with-a-string-secret-key-in-python – saniaxxx26

3

ハッシングの最も一般的なアルゴリズムはmd5です。 Djangoのパスワードシステムからいくつかのアイデアを抽出すると、このコードになります

import hashlib 

def make_password(password): 
    assert password 
    hash = hashlib.md5(password).hexdigest() 
    return hash 

def check_password(hash, password): 
    """Generates the hash for a password and compares it.""" 
    generated_hash = make_password(password) 
    return hash == generated_hash 


>>> hash = make_password('hello123') 
>>> hash 
'f30aa7a662c728b7407c54ae6bfd27d1' 
>>> check_password(hash, 'hello123') 
True 
>>> check_password(hash, 'Hello123') 
False 

使用make_password入力したパスワードが保存されたものと同じであるかどうかを確認するために、ハッシュとcheck_passwordを生成します。 algorithm$salt$hash

@Emilが指摘したように、Djangoは$によって分離された3倍値として文字列を記憶し、そのようなpbkdf2_sha256とpbkdf2_sha1として複数のパスワードhashersをサポートします。 saltは、同じパスワードがデータベース内で繰り返されないようにランダムに生成された文字列です。