首先,引入模塊:
算法
代碼以下 |
複製代碼 |
>>> from django.contrib.auth.hashers import make_password, check_passworddjango 生成密碼: >>> make_password("www.111cn.net", None, 'pbkdf2_sha256') u'pbkdf2_sha256$12000$H6HRZD4DDiKg$RXBGBTiFWADyw+J9O7114vxKvysBVP+lz7oSYxkoic0='函數 |
這樣就能夠利用django自帶的模塊生成一組密碼了,這個函數還有一個特色在於每次生成的密碼還不同:加密
代碼以下 |
複製代碼 |
>>> make_password("www.111cn.net", None, 'pbkdf2_sha256') u'pbkdf2_sha256$12000$H6HRZD4DDiKg$RXBGBTiFWADyw+J9O7114vxKvysBVP+lz7oSYxkoic0=' >>> make_password("www.111cn.net", None, 'pbkdf2_sha256') u'pbkdf2_sha256$12000$9l09rJd9MbQj$0tJVXBZFN6WwD/qI3WELdrRWOU7Inb7im3uB/np2PPg=' >>> make_password("www.111cn.net", None, 'pbkdf2_sha256') == make_password("www.111cn.net", None, 'pbkdf2_sha256') Falsespa |
既然每次生成的密文都不同,如何驗證用戶提交過來的明文與密文匹配呢?這就靠check_password去作了,check_password使用很是簡單,只須要告訴它明文和密文它就會返回False or True驗證結果.net
代碼以下 |
複製代碼 |
>>> text = "www.111cn.net" >>> passwd = make_password(text, None, 'pbkdf2_sha256') >>> print passwd pbkdf2_sha256$12000$xzMLhCNvQbb8$i1XDnJIpb/cRRGRX2x7Ym74RNfPRCUp5pbU6Sn+V3J0= >>> print check_password(text, passwd) Truemd5 |
若是你不想每次都生成不一樣的密文,能夠把make_password的第二個函數給一個固定的字符串,好比:ci
代碼以下 |
複製代碼 |
>>> make_password(text, "a", 'pbkdf2_sha256') u'pbkdf2_sha256$12000$a$5HkIPczRZGSTKUBa5uzZmRuAWdp2Qe6Oemhdasvzv4Q=' >>> make_password(text, "a", 'pbkdf2_sha256') u'pbkdf2_sha256$12000$a$5HkIPczRZGSTKUBa5uzZmRuAWdp2Qe6Oemhdasvzv4Q=' |
只要是任意字符串就能夠,而且能夠多個。但不能爲空,如:文檔
代碼以下 |
複製代碼 |
>>> make_password(text, "", 'pbkdf2_sha256') u'pbkdf2_sha256$12000$KBcG81bWMAvd$aJNgfTOGFhOGogLSTE2goEM3ifKZZ1hydsuFEqnzHXU=' >>> make_password(text, "", 'pbkdf2_sha256') u'pbkdf2_sha256$12000$fNv3YU4kgyLR$1FI8mxArDHt6Hj/eR72YCylGTAkW7YMWTj+wV4VHygY='字符串 |
爲空的字符串就至關於:
1
代碼以下 |
複製代碼 |
make_password(text, None, 'pbkdf2_sha256') |
至於make_password第三個參數是表示生成密文的一種方式,根據文檔給出的大概有這幾種:
代碼以下 |
複製代碼 |
pbkdf2_sha256 pbkdf2_sha1 bcrypt_sha256 bcrypt sha1 unsalted_md5 crypt |
以上例子我使用了第一種加密方式pbkdf2_sha256,crypt和bcrypt都須要另外單獨安裝模塊,unsalted_md5就是常見的md5加密,若是對加密哈希算法不是很瞭解,那麼就使用django最新的哈希算法pbkdf2_sha256就好