2013-09-30 60 views
6

如何手動爲django生成密碼?例如,在其他應用程序,但使用同一個數據庫Django的。對於用戶名「管理員」密碼這樣Django的python密碼生成器

pbkdf2_sha256$10000$T0BzrDwfZSrI$pSgvDEam9V9jcdYpYDVkYMMwtSnRrFdf6Aqow82Tjr8= 

回答

10

我想這也許你正在尋找的東西:

Manually managing a user’s password

make_password(密碼[,鹽,hashers])

創建在 的格式的散列密碼使用通過此應用程序。它需要一個強制性參數: 以純文本形式輸入密碼。或者,如果您不想使用默認值(第一個 條目的PASSWORD_HASHERS設置),則可以提供一個salt和一個使用的散列算法。當前支持的算法 是:'pbkdf2_sha256','pbkdf2_sha1','bcrypt_sha256'(請參閱使用帶Django的bcrypt ),'bcrypt','sha1','md5','unsalted_md5'(僅用於 向後兼容性) crypt「,如果你已經安裝了crypt庫 。如果密碼參數爲None,則返回一個不可用的密碼 (check_password()將永遠不會接受該密碼)。


我想使用不Django的

那麼幸運的是,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檢查,如果輸入的密碼是一樣的存儲之一。

正如@Emil指出,Django支持多個密碼hashers如pbkdf2_sha256和pbkdf2_sha1,存儲字符串作爲由$分離的3倍值:algorithm$salt$hashsalt是一個隨機生成的字符串,用於防止在數據庫中重複使用相同的密碼。