django加密解密api


分別給出了兩個API,一個創造密碼,一個驗證密碼正好滿足需求。於是趕緊試試:

首先,引入模塊:

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

生成密碼:

1
2
>>> make_password( "qttc" , None , 'pbkdf2_sha256' )
u 'pbkdf2_sha256$12000$H6HRZD4DDiKg$RXBGBTiFWADyw+J9O7114vxKvysBVP+lz7oSYxkoic0='

這樣就可以利用django自帶的模塊生成一組密碼了,這個函數還有一個特點在於每次生成的密碼還不一樣:

1
2
3
4
5
6
7
8
9
>>> make_password( "qttc" , None , 'pbkdf2_sha256' )
u 'pbkdf2_sha256$12000$H6HRZD4DDiKg$RXBGBTiFWADyw+J9O7114vxKvysBVP+lz7oSYxkoic0='
 
>>> make_password( "qttc" , None , 'pbkdf2_sha256' )
u 'pbkdf2_sha256$12000$9l09rJd9MbQj$0tJVXBZFN6WwD/qI3WELdrRWOU7Inb7im3uB/np2PPg='
 
>>> make_password( "qttc" , None , 'pbkdf2_sha256' ) = = make_password( "qttc" , None ,
'pbkdf2_sha256' )
False

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

1
2
3
4
5
6
>>> text = "qttc"
>>> passwd = make_password(text, None , 'pbkdf2_sha256' )
>>> print passwd
pbkdf2_sha256$ 12000 $xzMLhCNvQbb8$i1XDnJIpb / cRRGRX2x7Ym74RNfPRCUp5pbU6Sn + V3J0 =
>>> print check_password(text, passwd)
True

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

1
2
3
4
>>> make_password(text, "a" , 'pbkdf2_sha256' )
u 'pbkdf2_sha256$12000$a$5HkIPczRZGSTKUBa5uzZmRuAWdp2Qe6Oemhdasvzv4Q='
>>> make_password(text, "a" , 'pbkdf2_sha256' )
u 'pbkdf2_sha256$12000$a$5HkIPczRZGSTKUBa5uzZmRuAWdp2Qe6Oemhdasvzv4Q='

只要是任意字符串就可以,並且可以多個。但不能為空,如:

1
2
3
4
5
>>> 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第三個參數是表示生成密文的一種方式,根據文檔給出的大概有這幾種:

  1. pbkdf2_sha256
  2. pbkdf2_sha1
  3. bcrypt_sha256
  4. bcrypt
  5. sha1
  6. unsalted_md5
  7. crypt

以上例子我使用了第一種加密方式pbkdf2_sha256cryptbcrypt都需要另外單獨安裝模塊,unsalted_md5就是常見的md5加密,如果對加密哈希算法不是很了解,那么就使用django最新的哈希算法pbkdf2_sha256就好


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM