如何手動爲django生成密碼?例如,在其他應用程序,但使用同一個數據庫Django的。對於用戶名「管理員」密碼這樣Django的python密碼生成器
pbkdf2_sha256$10000$T0BzrDwfZSrI$pSgvDEam9V9jcdYpYDVkYMMwtSnRrFdf6Aqow82Tjr8=
如何手動爲django生成密碼?例如,在其他應用程序,但使用同一個數據庫Django的。對於用戶名「管理員」密碼這樣Django的python密碼生成器
pbkdf2_sha256$10000$T0BzrDwfZSrI$pSgvDEam9V9jcdYpYDVkYMMwtSnRrFdf6Aqow82Tjr8=
我想這也許你正在尋找的東西:
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。
用於散列的最常用的(不是最安全的)算法是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$hash
。 salt
是一個隨機生成的字符串,用於防止在數據庫中重複使用相同的密碼。
謝謝,但這種方法與django應用程序一起使用。我想要使用沒有Django的函數,像這樣:http://stackoverflow.com/questions/1306550/calculating-a-sha-hash-with-a-string-secret-key-in-python – saniaxxx26