1. 程式人生 > >Django自帶加密模組的使用

Django自帶加密模組的使用

轉載地址:http://www.111cn.net/phper/python/59720.htm

但考慮到Django有使用者驗證模組,證明它已具備跨平臺的加密模組。

首先,引入模組:
 

 程式碼如下 複製程式碼

>>> from django.contrib.auth.hashers import make_password, check_password

生成密碼:
 
>>> 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')
False

既然每次生成的密文都不一樣,如何驗證使用者提交過來的明文與密文匹配呢?這就靠check_password去做了,check_password使用非常簡單,只需要告訴它明文和密文它就會返回False or True驗證結果

 程式碼如下 複製程式碼

 
>>> 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)
True

如果你不想每次都生成不同的密文,可以把make_password的第二個函式給一個固定的字串,比如:

 程式碼如下 複製程式碼
 
>>> 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就好