我正在使用dongang中的mongoengine(MongoDb ORM)。我想驗證用戶,他的密碼應該存儲在散列值中。由於mongoengine沒有給出任何PasswordField()來存儲密碼,所以Plz幫助我。在mongoengine中使用md5進行密碼散列
我可以通過其他任何選項驗證用戶logi n。
我正在使用dongang中的mongoengine(MongoDb ORM)。我想驗證用戶,他的密碼應該存儲在散列值中。由於mongoengine沒有給出任何PasswordField()來存儲密碼,所以Plz幫助我。在mongoengine中使用md5進行密碼散列
我可以通過其他任何選項驗證用戶logi n。
的Django內置了兩個非常有用的密碼散列算法。
見docs.djangoproject.com,其中規定
默認情況下,Django使用PBKDF2算法與SHA256哈希
和
Bcrypt是一種流行的密碼存儲算法,專門設計用於長期密碼存儲。這不是Django使用的默認設置,因爲它需要使用第三方庫,但是由於許多人可能想要使用它,Django只需很少的努力即可支持bcrypt。
如果您使用足夠多的迭代/工作因子,這兩者中的任何一個都非常出色;請勿使用任何其他選項。 Django通過以上鍊接可以輕鬆實現:
PBKDF2和bcrypt算法使用多次迭代或舍入散列。這有意地減緩了攻擊者的攻擊速度,使對哈希密碼的攻擊更加困難。但是,隨着計算能力的增加,迭代次數需要增加。我們選擇一個合理的默認值(和將使用Django的每個版本增加),但你可能要調整它
所以,在你的設置文件爲新的應用程序,你可以增加工作的因素一個新的子類:
從django.contrib.auth.hashers導入PBKDF2PasswordHasher
class MyPBKDF2PasswordHasher(PBKDF2PasswordHasher):
"""
A subclass of PBKDF2PasswordHasher that uses 100 times more iterations.
"""
iterations = PBKDF2PasswordHasher.iterations * 100
然後把在設置文件的變種,同時讓老PBKDF2-HMAC-SHA-256和BCryptSHA256散列是閱讀:
PASSWORD_HASHERS = [
'myproject.hashers.MyPBKDF2PasswordHasher',
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
'django.contrib.auth.hashers.BCryptPasswordHasher',
]
,還可以設置一些密碼驗證:
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
'OPTIONS': {
'min_length': 9,
}
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
要(登錄頁面上等)驗證輸入的密碼與存儲的密碼:
check_password(password, encoded)
要生成一個新的密碼輸入(如從註冊頁面,他們選擇或更改密碼):
make_password(password, salt=None, hasher='default')