django系列八:密碼加密
前言
因為有密碼,所以對數據的安全多了一點點的放心。而且尤其是在資料庫存儲這方面,對敏感的數據都是需要進行加密,比如密碼、用戶手機號、銀行卡號等等。
在Django中的密碼學還是比較有意思的,用起來也是比較爽的。上篇文章django系列七:用戶註冊中用戶密碼在保存的時候是以明文的方式存儲的,其實這樣是不合理的,下面來看看Django中的密碼加密的一些演算法。
Django中的加密演算法
Django中的加密的演算法有很多種
PASSWORD_HASHERS = [ django.contrib.auth.hashers.PBKDF2PasswordHasher, django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher, django.contrib.auth.hashers.Argon2PasswordHasher, django.contrib.auth.hashers.BCryptSHA256PasswordHasher, django.contrib.auth.hashers.BCryptPasswordHasher,]
默認是PBKDF2(本系列不作深入探究)演算法。如果要更改加密方式,只需要變更下順序,把想要應用的演算法放在第一位即可。比如:要應用Argon2演算法進行加密,則配置更改成如下:
PASSWORD_HASHERS = [ django.contrib.auth.hashers.Argon2PasswordHasher, django.contrib.auth.hashers.PBKDF2PasswordHasher, django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher, django.contrib.auth.hashers.BCryptSHA256PasswordHasher, django.contrib.auth.hashers.BCryptPasswordHasher,]
註:Argon2該演算法是從1.10版本開始有的。它的設計在定製硬體上比在普通CPU上計算更容易。而且Argon2加密演算法在2015年 Password Hashing Competition的中是奪冠的。
在ananlysis中應用的是該演算法。在analysis/settings.py文件中增加上述節點。因為Argon2加密演算法是需要依賴第三方庫 argon2-cffi library 的,所在應用該演算法的時候首先需要安裝 argon2-cffi library,執行命令:pip install django[argon2]。
下面開始把加密演算法應用到項目中。
Argon2應用
其實所有的東東應用起來都是很簡單的,在應用程序中其實也就是一句話,那麼現在來更改下/web/customer_form.py文件。首先引用make_password模塊
from django.contrib.auth.hashers import make_password
然後更改model中的密碼為:
user.password =make_password(self.cleaned_data[password])
然後看下整體的代碼:
from django import formsfrom ..models.user_model import Users#引入密碼模塊from django.contrib.auth.hashers import make_passwordclass RegisterForm(forms.Form): user_name = forms.CharField( widget=forms.TextInput(attrs={class: form-control, placeholder: 用戶名, required: True})) email = forms.CharField(widget=forms.EmailInput( attrs={class: form-control, placeholder: 郵箱, required: True})) password = forms.CharField(widget=forms.PasswordInput( attrs={class: form-control, placeholder: 密碼, required: True})) confirm_password = forms.CharField(widget=forms.PasswordInput( attrs={class: form-control, placeholder: 確認密碼, required: True})) def clean(self): cleaned_data = super(RegisterForm, self).clean() password = cleaned_data.get(password) confirm_password = cleaned_data.get(confirm_password) if password and confirm_password: if password != confirm_password: raise forms.ValidationError(u兩次密碼輸入不一致,請重新輸入) def save(self): user = Users() user.user_name = self.cleaned_data[user_name] user.email = self.cleaned_data[email] #密碼更改處 user.password =make_password(self.cleaned_data[password]) user.save()
下面通過訪問 http://localhost:8080/web/register/ 然後註冊一個新的賬號,並看下密碼的結果(過程省略了,然後直接看下結果)。
這個時候查詢資料庫的users collecction會發現多了條數據,密碼為:
{ "_id" : ObjectId("5a5dcce462f7ab182cfde5e9"), "user_name" : "test", "email" : "123@qq.com", "password" : "argon2$argon2i$v=19$m=512,t=2,p=2$aERjdlVUaGVqZkFm$EEldDVhhKkCFefsGMSiUVw", "is_active" : false}
其中密碼是應用的argon2演算法。大家可以適當的調動下PASSWORD_HASHERS中的演算法位置,然後看下效果。這裡不做過多的說明和介紹了。這樣呢註冊就算可以告一段落了。
大家如果對Django密碼演算法感興趣地可以參考官網中的詳細介紹。
推薦閱讀:
※職位速遞:知名互聯網金融公司高級數據分析工程師(年薪30~50W)
※惠眾在線行業情報|互聯網改變下的傳統節日
※django系列七:用戶註冊
※如何入門精益數據分析
※Kaggle數據分析:什麼專業最有錢景?