2016-02-13 66 views
0

我正在使用dongang中的mongoengine(MongoDb ORM)。我想驗證用戶,他的密碼應該存儲在散列值中。由於mongoengine沒有給出任何PasswordField()來存儲密碼,所以Plz幫助我。在mongoengine中使用md5進行密碼散列

我可以通過其他任何選項驗證用戶logi n。

回答

1

的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')